c++ - título - seo/title




¿Cuál es el propósito de__in__out__in_opt__allowed(), cómo funcionan? ¿Debo usar construcciones similares en mi propio código? (3)

Estas macros de Microsoft generalmente se expanden a nada, y están pensadas como sugerencias para el lector.

Sin embargo, la última vez que verifiqué, por ejemplo, la sugerencia de los argumentos de MessageBox fue completamente errónea, aludiendo que el primer, segundo y tercer argumento tenían valores predeterminados útiles (cuando se especifica 0), mientras que en realidad el primer y cuarto argumento tienen valores predeterminados útiles. Tal vez también el argumento del título, que por defecto es "Error", pero nunca lo encontré útil. Por lo tanto, es solo una cosa de Microsoft, insinuaciones de que no puedes y no debes confiar, solo un desorden visual engañoso.

Salud y salud,

Algunas de estas definiciones de preprocesador se encuentran en la función WinMain y otras funciones de la biblioteca de Windows. ¿Cuál es su propósito? ¿Cómo trabajan? ¿Es una buena práctica escribirlas en sus implementaciones o llamadas a funciones?

Mi investigación inicial sugiere que simplemente se configuran como equivalentes a:

#define __in 
#define __out
#define __in_opt

Lo que significa que se reemplazan con nada en el pase de preprocesador. ¿Son solo un método de documentación, sin ninguna funcionalidad?

Si es así, puedo ver la ventaja de documentar el código en línea como este. Con algo como doxygen necesitas escribir los nombres de los parámetros dos veces. Entonces, en teoría, esto podría ayudar a reducir la duplicación y mantener la consistencia ...

No tengo ninguna teoría de cómo se supone que __allowed() funciona.


Las anotaciones SAL son útiles para dos cosas:

  • Análisis estático a través de PREfast (compilar con / analizar)
  • Los lectores humanos pueden ver las anotaciones y descubrir cómo se debe llamar a una función, y determinar rápidamente los parámetros de entrada / salida.

De hecho, las macros se expanden a varias expresiones declpec cuando su código se compila con el análisis activado. Yo uso estas anotaciones todo el tiempo en mi código.


Son anotaciones SAL en el lenguaje de anotación de código fuente. Las herramientas de Microsoft dependen de ello. El artículo de MSDN Library está aquí . Un buen ejemplo es el análisis de código . Otra herramienta bastante no relacionada, pero habilitada por estas anotaciones es el Asistente de interoperabilidad de Pinvoke.





winmain