Pregunta

Estoy tratando de usar la anotación SAL de Micosoft para mi proyecto, sin embargo, recibo la siguiente advertencia y no sé por qué.

Como ejemplo, creé una nueva aplicación de consola C ++ y tengo este código:

#include <sal.h>

class Whatever
{
public:
    _Check_return_ int Method(__in int number) ;
};

int main()
{
    return 0;
}

Cuando compilo usando Visual Studio 2008, aparece la siguiente advertencia:

advertencia C6540: el uso de anotaciones de atributos en esta función invalidará todas sus anotaciones __declspec existentes

En el archivo " c1xxast "

¿Qué estoy haciendo mal? Si elimino el _Check_return_ o el __in, la advertencia desaparece.

No puedo encontrar ninguna referencia a la advertencia C6550. Sin embargo, el mismo texto se puede encontrar aquí: http://msdn.microsoft.com /en-us/library/dd445322.aspx , pero no es muy útil.

¿Fue útil?

Solución

El problema puede deberse a que está mezclando tipos de anotaciones SAL. Aunque se dejó muy claro en MSDN, hay dos tipos de anotaciones SAL: atributo y ... er ... no.

Los #define s en <sal.h> VC2005 usan versiones sin atributos y comienzan con un guión bajo seguido de una letra en minúsculas . Las versiones más recientes de VC2008 se expanden a los atributos del compilador y comienzan (y finalizan) con un guión bajo seguido de una letra mayúscula .

Has mezclado los dos tipos:

Atributo:

  • _In_
  • _Check_return_

Sin atributos:

  • __in
  • __checkReturn

Intente cambiar sus anotaciones para usar un solo tipo de manera consistente.

Esta publicación de blog explica un poco más sobre esto.

Otros consejos

Debe agregar anotaciones SAL tanto a la declaración como a la definición de un método. Supongo que SAL está molesto porque no puede encontrar la definición del método y supone que faltan los atributos.

EDITAR Aclaración

Las anotaciones SAL deben aparecer en ambas ubicaciones para métodos no abstractos. Para métodos abstractos, SAL no buscará una definición. En ciertas configuraciones, se asegurará de que la implementación de la interfaz tenga las anotaciones apropiadas.

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