Quel est le but de __in __out __in_opt __allowed (), comment fonctionnent-ils? Dois-je utiliser des constructions similaires dans mon propre code?

StackOverflow https://stackoverflow.com/questions/4239809

  •  27-09-2019
  •  | 
  •  

Question

Certaines de ces définitions préprocesseur sont dans la fonction WinMain et d'autres fenêtres fonctions bibliothèque. Quel est leur but? Comment travaillent-ils? et est-il une bonne pratique de les écrire dans vos implémentations ou appels de fonction?

Ma recherche initiale suggère qu'ils sont tout simplement mis en place equlivalent à:

#define __in 
#define __out
#define __in_opt

Ce qui signifie qu'ils se remplacer par rien sur le col préprocesseur. Sont-ils seulement une méthode de documentation, sans aucune fonctionnalité?

Si oui, je peux voir l'avantage de documenter le code dans la ligne comme celui-ci. Avec quelque chose comme doxygen vous devez écrire les noms des paramètres deux fois. Donc, cela pourrait en théorie aider à réduire les doubles emplois et maintenir la cohérence ...

Je n'ai pas la théorie de la façon dont __allowed() est censé fonctionner.

Était-ce utile?

La solution

Ils sont des annotations SAL dans le code source Annotation Langue. outillage Microsoft dépend. L'article MSDN Library est . Un bon exemple est Analyse . Un autre outil tout à fait sans rapport, mais le pouvoir par ces annotations est le Pinvoke Interop adjoint.

Autres conseils

annotations SAL sont utiles pour deux choses:

  • Analyse statique par PREfast (avec la compilation / analyse)
  • lecteurs humains peuvent regarder les annotations et de déterminer comment une fonction doit être appelée et déterminer rapidement les paramètres d'entrée / sortie.

Les macros ne en fait étendre à diverses expressions de declspec lorsque votre code est compilé avec analyse. J'utilise ces annotations tout le temps dans mon code.

Ils sont utilisés dans un outil d'analyse sémantique Microsoft comme une marge brute de code. À moins que vous prévoyez d'utiliser vous-même outil, il y a peu d'intérêt à les utiliser.

Ces macros Microsoft étendent généralement à rien, et sont conçus comme des conseils au lecteur.

Cependant, la dernière fois que j'ai vérifié par exemple le faisant allusion aux arguments de MessageBox était complètement faux, laissant entendre que la première, deuxième et troisième argument a par défaut utiles (lorsque vous spécifiez 0), alors qu'en réalité il est d'abord et quatrième argument des valeurs par défaut utiles. Peut-être aussi l'argument de titre qui est par défaut « erreur », mais je ne l'ai jamais trouvé que utile. Ainsi, il est juste une chose Microsoft, des conseils que vous ne pouvez pas et ne doit pas compter, tout simplement induire en erreur l'encombrement visuel.

Vive et HTH.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top