aviso anotação estranha SAL
-
19-08-2019 - |
Pergunta
Eu estou tentando usar anotação SAL do Micosoft para o meu projeto, no entanto eu recebo o seguinte aviso, e eu não sei porquê.
Como um exemplo, eu criei um aplicativo de console novo C ++, e tenho este código:
#include <sal.h>
class Whatever
{
public:
_Check_return_ int Method(__in int number) ;
};
int main()
{
return 0;
}
Quando eu compilar usando Visual Studio 2008, eu recebo o seguinte aviso:
aviso C6540: O uso de anotações de atributos sobre esta função irá invalidar todas as suas anotações __declspec existentes
No arquivo "c1xxast"
O que estou fazendo de errado? Se eu remover tanto o _Check_return_
ou o __in
, o aviso vai embora.
Não consigo encontrar qualquer referência à C6550 aviso. No entanto, o mesmo texto pode ser encontrada aqui: http://msdn.microsoft.com /en-us/library/dd445322.aspx , mas não é muito útil.
Solução
O problema pode ser porque você está misturando tipos SAL anotação. Embora muito claro no MSDN, existem dois tipos de SAL anotação:. Atributo e ... er ... não
Os #define
s em uso <sal.h>
VC2005 as versões não-atributos e começar com um sublinhado seguido por um em minúsculas carta. Os VC2008 versões mais recentes expandir para atributos do compilador e começar (e final) com um sublinhado seguido por um de capital carta.
Você ter misturado os dois tipos:
Atributo:
- _Em _
- _Check_return _
Não-atributo:
- __ em
- __ checkReturn
Tente alterar suas anotações de usar um único tipo de forma consistente.
Este post explica um pouco mais sobre isso.
Outras dicas
Você deve adicionar anotações SAL tanto para a declaração e a definição de um método. Eu estou supondo virada do SAL porque ele não pode encontrar a definição do método e assume os atributos estão faltando.
Editar Clarificação
annotions SAL deve aparecer em ambos os locais para métodos não-abstrato. Para métodos abstratos SAL não vai olhar para uma definição. Em determinadas configurações ele vai realmente garantir que a implementação da interface tem as anotações apropriadas.