2012-03-23 8 views
5

関数パラメータの変数の前に使用されるこれらのキーワードの意味は何ですか?__in、__out、__in_optの意味

  • __in
  • __out
  • __in_opt
+1

これらはキーワードではなく、MicrosoftのSAL注釈 – Necrolis

+0

はそれが実質的な影響を与えないということですか?コンパイラのための – Zcube

+0

いいえ、コーダーのために彼/彼女がAPIを正しく使用するのを助けるべきです。 – Necrolis

答えて

9

者は、MicrosoftのSAL注釈から古い装飾マクロの(the newer onesは現在首都で始まる、異なる筐体に従う)の一部です。これらはコンパイルにはまったく影響がありません(VS 2010の下では拡張されていません)、インラインAPIドキュメントのためにそこにあります。

  1. __in:このパラメータは、関数への入力です(読み取り専用、呼び出し元の初期化)。
  2. __out:このパラメータには、関数が返すときの出力(書き込み専用、呼び出し元の初期化)が含まれます。
  3. __in_opt_inおよび_opt,_optから形成される化合物の注釈であり、パラメータはオプションであり、デフォルト値(通常NULL)に設定することができます。

古い装飾の詳しい説明はhereです。

+0

非常に非常に感謝しています。私は長い時間を探してきました。私はここで最後に答えを見つけました。 – Zcube

3

Nercolisの回答として、これらはSALアノテーション属性です。ただし、これらは、内部またはのAPIドキュメントの場合のみではありません。実際の目的はコード分析です。 /analyzeコンパイラオプション(プロジェクトプロパティ、コード解析 - >一般)を使用してプロジェクトをビルドすると、コーディングの問題を見つける上で重要な役割を果たします。

たとえば、特定のポインタ引数が__inと表示されている場合、NULLポインタは渡されてはなりません。この関数はnullをチェックせず、SEHを引き起こす可能性があります。 __in_opt引数はnullでもかまいません。コンパイラは何らかの問題を発見すると、それを警告として報告します。 this articleを参照してください。