関数パラメーターの変数の前に使用されるこれらのキーワードの意味は何ですか?
__in
__out
__in_opt
これらは、Microsoft の SAL Annotations からの古い装飾マクロの一部です (新しいものは、大文字で始まる別の大文字小文字に従います)。これらはコンパイルには実際には影響しません (VS 2010 では展開さえされません)。インライン API ドキュメント用です。
__in
: このパラメーターは、関数への入力です (読み取り専用、呼び出し元が初期化されます)。__out
: このパラメーターには、関数が戻るときに関数からの出力が含まれます (書き込み専用、呼び出し元が初期化されます)。__in_opt
: と から形成された複合注釈で_in
あり_opt
、_opt
パラメータがオプションであり、デフォルト値 (通常は ) に設定できることを示しますNULL
。ここで古い装飾の完全な説明を得ることができます。
Nercolis の回答によると、これらは SAL 注釈属性です。ただし、これらは社内用またはAPI ドキュメント用だけのものではありません。本当の目的はコード分析です。/analyzeコンパイラ オプション ([プロジェクト プロパティ]、[コード分析] -> [全般])を使用してプロジェクトをビルドすると、これらはコーディングの問題を見つける上で重要な役割を果たします。
たとえば、特定のポインター引数が示す場合__in
、null ポインターを渡してはなりません。この関数は null をチェックしないため、SEH が発生する可能性があります。__in_opt
引数は null の可能性があります。コンパイラが問題を検出すると、警告として報告します。この記事を参照してください。