2011-07-07 7 views
0

私はマイクロソフトのSAL(Source Annotation Language)が良いことであり、言語と意味を勉強したと考えています。annotation propertiesMicrosoftのSAL Deref = 1の「int」パラメータに関連するプロパティ?

私は「int型」パラメータに関連したSALの「DEREF」財産の使用に関する一般的な質問があります。 [戻り値:SA_Post(MustCheck = SA_Yes)]

: のint __cdecl はisalphaのVisual Studio 10を実行している、私はファイルを含めるのctype.hから取られ、SALはisalpha()関数で私の質問を説明してみましょう([SA_Pre(Null = SA_No)] [SA_Pre(Deref = 1、有効= SA_Yes、アクセス= SA_Read)] int _C);

"int型" における単一のパラメータ_Cは、 "[SA_Pre(DEREF = 1、有効=のSA_Yesは、アクセス= SA_Read)]" 何を意味するのか?意味のあるやり方でintを一度逆参照できますか(Deref = 1)?

私が考えることができる唯一の説明は、整数がctypeの内部バイト配列への参照であることです。スタティック・アナライザはこのアノテーションをどのように活用できますか?

答えて

1

これは、isalpha宣言の前処理バージョンに貼り付けられたようです。私はのctype.hで見るものは次のとおりです。

_Check_return_ _CRT_JIT_INTRINSIC _CRTIMP int __cdecl isalpha(_In_ int _C); 

_In_は、開発者が明示的にパラメータが厳密に入力パラメータであることを表現してみましょうするためにスカラーパラメータ(int型など)で許可されています。これは冗長ですが、まだ真です(結局、値渡しスカラを使って値を返すことはできません)。

注釈_In_は、ポインタのセマンティクスを表現するために上に貼り付けたとおりに展開するマクロです。スタティック・アナライザは、_In_がスカラ・パラメータに適用されていることを認識し、無視します.NullもDeref = 1もintには意味がありません。

他のコンテキストでは、_In_アノテーションの一部に加えて、intのDeref = 1は意味をなさないでしょう。

SA_PreとSA_Postではなく、_In_スタイルの構文を使用する方が一般的には、このような基本的な実装の詳細を調べる必要がある場合を除き、一般的には良いです。

+0

私は今あなたの返信に気づいただけですが、ありがとうございます。という法律上の制限はありません。 –

+0

最高の意味論レベルでSALを使用する必要があります。私の場合は、SALプリプロセッサの出力を解析して理解する必要があります。冗長な情報があるかもしれませんが、塩分のあるスタティックアナライザはその情報を無視します。 BTWでは、MS CRT関数は属性SALを使用し、Win32関数はdeclspec SALを使用するため、両方の方言を学習する必要があります([リンク](http://blogs.msdn.com/b/sdl/archive/2009/06/)参照)。 11/a-declspec-sal-to-attribute-sal-rosetta-stone.aspx))。 –

+0

うれしかった!それが価値があると思われる場合は、回答を受け入れたものとしてマークしてください。また、Windows 8の場合、Win32関数がMS CRTスタイルの構文(たとえば、__inではなく_In_)に移行していることにも注意してください。 – DavidS

関連する問題