¿Cuál es el propósito de __in __out __in_opt __allowed (), ¿cómo funcionan? ¿Debo usar construcciones similares en mi propio código?

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

  •  27-09-2019
  •  | 
  •  

Pregunta

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

Mi investigación inicial sugiere que están simplemente configurar equlivalent a:

#define __in 
#define __out
#define __in_opt

Lo que significa que son reemplazados con no en el pase del preprocesador. ¿Son sólo un método de documentación, sin ninguna funcionalidad?

Si es así, se puede ver la ventaja de documentar el código en línea como esta. Con algo así como doxygen que necesita para escribir los nombres de los parámetros dos veces. Por lo que este podría, en teoría ayuda reducir la duplicación y mantener la consistencia ...

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

¿Fue útil?

Solución

Son anotaciones SAL en el código fuente de anotación de idioma. herramientas Microsoft depende de ello. El artículo de MSDN es aquí . Un ejemplo bueno es análisis de código . Otra herramienta sin relación alguna, pero facultado por estas anotaciones es la interoperabilidad Asistente Pinvoke.

Otros consejos

SAL anotaciones son útiles para dos cosas:

  • El análisis estático a través de PREfast (compilación con / analizar)
  • lectores humanos pueden mirar las anotaciones y encontrar la manera de una función debe ser llamada, y determinar rápidamente los parámetros de entrada / salida.

Las macros de hecho expandirse a diferentes expresiones declspec cuando el código se compila con análisis sobre. Yo uso todas estas anotaciones la hora en mi código.

Se utilizan en una herramienta de análisis semántico Microsoft como marcas de código. A menos que usted planea usar esta herramienta usted mismo, hay poco efecto en el uso de ellos.

Estas macros de Microsoft generalmente se expanden para nada, y se ofrecen como pistas para el lector.

Sin embargo, la última vez que comprueba, por ejemplo, la insinuación en los argumentos MessageBox estaba completamente equivocada, dando a entender que el primer, segundo y tercer argumento tenía defecto muy útiles (cuando se especifica 0), mientras que en realidad es primero y el cuarto argumento de que tienen valores por defecto útiles. Tal vez también el argumento del título que por defecto es "error", pero nunca he encontró que útil. Por lo tanto, es sólo una cosa de Microsoft, indicios de que se puede y no debe depender, simplemente engañosa desorden visual.

Saludos y HTH.,

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top