2010-11-14 19 views
3

Dans le fichier d'en-tête de Windows WinNT.h, HRESULT est définit comme suit:Que fait cette macro? __success (retour> = 0) à long

typedef __success(return >= 0) long HRESULT; 

Faire des recherches que j'ai appris que la macro "__success" fait partie du code source Microsoft langue d'annotation SAL et est définie dans sal.h. Mais pour la vie de moi, je ne peux pas comprendre ce qu'il fait ou comment il le fait.

Merci d'avance.

Todd

+0

Il semble que cette question a déjà été postée: http://stackoverflow.com/questions/1985521/explaining-the-declaration-definition-of-hresult __success se développe à rien, donc cela n'affecte pas le code. Bien que cela puisse aider les outils d'analyse de Microsoft, à mon avis, cela nuit vraiment à la lisibilité du code. – Sabuncu

Répondre

5

This blog post on MSDN explique exactement ce que signifie __success: il indique qu'une fonction a réussi si elle retourne une valeur HRESULT> = 0.

Les annotations sont juste une façon de décrire quelque chose sur un morceau de code - par eux-mêmes, ils ne «font» rien, mais il est possible que des outils externes vérifient la sémantique de ces annotations.

+0

J'avais lu l'article avant de poster ma question. Le blog n'est pas bien écrit (commence soudain à parler d'un scanner sans aucune définition) et je ne pouvais vraiment pas le comprendre. Plus précisément, que se passe-t-il si le code de retour est inférieur à zéro? – Sabuncu

+0

@Toddintr: Comme je l'ai mentionné, les annotations en elles-mêmes ne changent pas la façon dont votre programme se comporte. Mais il existe des outils (voir http://blogs.msdn.com/b/michael_howard/archive/2006/05/19/602077.aspx) qui peuvent utiliser ces annotations pour inspecter votre code et vous avertir d'une utilisation éventuellement incorrecte. – casablanca