2012-03-23 13 views
5

¿Cuál es el significado de estas palabras clave utilizadas antes de las variables en los parámetros de una función ?Significado de __in, __out, __in_opt

  • __in
  • __out
  • __in_opt
+1

esas no son palabras clave, eso es la anotación SAL de Microsoft – Necrolis

+0

gracias, ¿eso significa que no tiene ningún efecto sustancial? – Zcube

+0

para el compilador no, para el codificador debería ayudarlo a usar la API correctamente. – Necrolis

Respuesta

9

Esos son algunos de los más viejos de la decoración macro de Sal Anotaciones de Microsoft (the newer ones ahora sigue carcasa diferente, empezando con mayúscula). Estos no tienen ningún efecto real en la compilación (en VS 2010 ni siquiera están expandidos), están ahí para la documentación API en línea.

  1. __in: este parámetro es una entrada a la función (solo lectura, iniciador de llamadas inicializado).
  2. __out: este parámetro contiene el resultado de la función cuando vuelve (solo escritura, iniciador de llamadas inicializado).
  3. __in_opt: una anotación compuesto formado a partir de _in y _opt, _opt indicios de que el parámetro es opcional y se puede ajustar a un valor predeterminado (generalmente NULL).

Puede obtener la explicación completa aquí de las decoraciones anteriores here.

+0

es muy detallado, muchas gracias. He buscado durante mucho tiempo, finalmente encontré la respuesta aquí. – Zcube

3

Según la respuesta de Nercolis, estos son atributos de anotación SAL. Sin embargo, estos no son solo interno o solo para API documentación. El verdadero propósito es Code Analysis. Cuando crea el proyecto con la opción de compilador /analyze (Propiedades del proyecto, Análisis de código -> General), estos desempeñan un papel importante en la búsqueda de los problemas de codificación.

Por ejemplo, si un argumento de puntero particular dice __in, entonces no se debe pasar un puntero nulo. La función no verificará nulo y puede causar SEH. __in_opt argumento puede ser nulo. Cuando el compilador encuentra algún problema, lo informa como una advertencia. Ver this article.