質問

プロジェクトに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注釈がすべて無効になります

ファイル<!> quot; c1xxast <!> quot;

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

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

役に立ちましたか?

解決

問題は、SAL注釈タイプを混合していることが原因である可能性があります。 MSDNでは非常に明確になっていますが、SALアノテーションには2つのタイプがあります。属性と... er ...ではありません。

#define VC2005の<sal.h>は非属性バージョンを使用し、アンダースコアで始まり、その後に小文字の文字が続きます。新しいVC2008バージョンは、コンパイラー属性に拡張され、アンダースコアの後に大文字の文字が続く(および終了する)。

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

属性:

  • _In _
  • _Check_return _

非属性:

  • __ in
  • __ checkReturn

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

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

他のヒント

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

編集明確化

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top