3

プロジェクトにMicosoftのSALアノテーションを使用しようとしていますが、次の警告が表示され、理由がわかりません。

例として、新しいC ++コンソールアプリケーションを作成し、次のコードを使用します。

#include <sal.h>

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

int main()
{
    return 0;
}

Visual Studio 2008を使用してコンパイルすると、次の警告が表示されます。

警告C6540:この関数で属性アノテーションを使用すると、既存の__declspecアノテーションがすべて無効になります

ファイル「c1xxast」内

私は何が間違っているのですか?_Check_return_またはを削除する__inと、警告が消えます。

警告C6550への参照が見つかりません。ただし、同じテキストがここにあります:http: //msdn.microsoft.com/en-us/library/dd445322.aspxですが、あまり役に立ちません。

4

2 に答える 2

10

問題は、SAL 注釈の種類が混在していることが原因である可能性があります。MSDN では非常に明確にされていますが、SAL 注釈には属性と ... えー ... ない 2 種類があります。

VC2005の#defines<sal.h>は非属性バージョンを使用し、アンダースコアで始まり、その後に小文字が続きます。新しい VC2008 バージョンは、コンパイラ属性に展開され、アンダースコアの後に大文字が続きます。

次の 2 つのタイプが混在しています。

属性:

  • _の_
  • _Check_return_

非属性:

  • __の
  • __checkReturn

注釈を変更して、単一の型を一貫して使用するようにしてください。

このブログ投稿では、これについてもう少し説明しています。

于 2009-03-21T18:08:42.113 に答える
1

メソッドの宣言と定義の両方にSALアノテーションを追加する必要があります。SALはメソッドの定義を見つけることができず、属性が欠落していると想定しているため、SALの動揺を推測しています。

明確化を編集

非抽象メソッドの場合、SAL注釈は両方の場所に表示される必要があります。抽象メソッドの場合、SALは定義を検索しません。特定の構成では、インターフェースの実装に適切な表記があることが実際に保証されます。

于 2009-03-16T23:34:37.053 に答える