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.

Foi ú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 #defines 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top