Domanda

Sto cercando di utilizzare l'annotazione SAL di Micosoft per il mio progetto, tuttavia ricevo il seguente avviso e non so perché.

Ad esempio, ho creato una nuova applicazione console C ++ e ho questo codice:

#include <sal.h>

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

int main()
{
    return 0;
}

Quando compilo usando Visual Studio 2008, ricevo il seguente avviso:

avviso C6540: l'uso delle annotazioni degli attributi su questa funzione invaliderà tutte le sue annotazioni __declspec

Nel file " c1xxast "

Cosa sto facendo di sbagliato? Se rimuovo _Check_return_ o __in, l'avviso scompare.

Non riesco a trovare alcun riferimento all'avvertimento C6550. Tuttavia lo stesso testo può essere trovato qui: http://msdn.microsoft.com /en-us/library/dd445322.aspx , ma non è molto utile.

È stato utile?

Soluzione

Il problema potrebbe essere dovuto al fatto che si stanno mescolando i tipi di annotazione SAL. Sebbene reso molto chiaro su MSDN, esistono due tipi di annotazione SAL: attributo e ... er ... no.

I #define s in <sal.h> VC2005 utilizzano le versioni non di attributo e iniziano con un carattere di sottolineatura seguito da una lettera minuscola . Le versioni più recenti di VC2008 si espandono agli attributi del compilatore e iniziano (e terminano) con un carattere di sottolineatura seguito da una lettera maiuscola .

Hai mescolato i due tipi:

Attributo:

  • _In _
  • _Check_return _

Non attributo:

  • __ in
  • __ checkReturn

Prova a modificare le annotazioni per utilizzare un singolo tipo in modo coerente.

Questo post sul blog spiega qualcosa in più al riguardo.

Altri suggerimenti

È necessario aggiungere annotazioni SAL sia alla dichiarazione che alla definizione di un metodo. Sto indovinando SAL perché non riesce a trovare la definizione del metodo e presume che gli attributi siano mancanti.

MODIFICA Chiarimento

Le promozioni SAL devono apparire in entrambe le posizioni per metodi non astratti. Per i metodi astratti SAL non cercherà una definizione. In alcune configurazioni garantirà effettivamente che l'implementazione dell'interfaccia abbia le notazioni appropriate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top