Frage

Ich versuche Micosoft SAL Anmerkung für mein Projekt zu verwenden, aber ich die folgende Warnung bekommen, und ich weiß nicht, warum.

Als Beispiel habe ich eine neue C ++ Konsolenanwendung, und haben diesen Code:

#include <sal.h>

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

int main()
{
    return 0;
}

Wenn wir kompilieren mit Visual Studio 2008, erhalte ich die folgende Warnung:

Warnung C6540: Die Verwendung von Attribut Anmerkungen zu dieser Funktion werden alle seine bestehenden Declspec Anmerkungen ungültig

In der Datei "c1xxast"

Was mache ich falsch? Wenn ich entweder die _Check_return_ oder die __in entfernen, wird die Warnung geht weg.

Ich kann keinen Hinweis auf die Warnung C6550 finden. Doch der gleiche Text kann hier gefunden werden: http://msdn.microsoft.com /en-us/library/dd445322.aspx , aber es ist nicht sehr hilfreich.

War es hilfreich?

Lösung

Das Problem sein kann, weil Sie SAL Annotationstypen mischen. Obwohl auf MSDN sehr deutlich gemacht, gibt es zwei Arten von SAL Anmerkung:. Attribut und ... äh ... nicht

Die #defines in <sal.h> VC2005 verwenden, um die Nicht-Attribute Versionen und durch einen Klein Brief mit einem Unterstrich beginnen, gefolgt. Die neueren Versionen VC2008 erweitern Attribute Compiler und starten (und Ende) mit einem Unterstrich, gefolgt von einem Kapital Brief.

Sie haben die beiden Typen gemischt:

Attribut:

  • _In _
  • _Check_return _

Nicht-Attribut:

  • __ in
  • __ checkReturn

Versuchen Sie, Ihre Anmerkungen zu ändern konsequent einen einzigen Typ zu verwenden.

diese Blog-Post ein bisschen mehr über das erklärt.

Andere Tipps

Sie müssen SAL Anmerkungen hinzufügen sowohl auf die Erklärung und die Definition eines Verfahrens. Ich vermute, SAL ist verärgert, weil es nicht die Definition des Verfahrens finden und übernimmt die Attribute fehlen.

Bearbeiten Klarstellung

SAL annotions muss an beiden Orten erscheinen für nicht-abstrakte Methoden. Für abstrakte Methoden SAL nicht für eine Definition suchen. In bestimmten Konfigurationen wird es tatsächlich sicherzustellen, dass die Implementierung der Schnittstelle die entsprechenden Bezeichnungen hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top