10

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

  • __in
  • __out
  • __in_opt
4

2 に答える 2

13

これらは、Microsoft の SAL Annotations からの古い装飾マクロの一部です (新しいものは、大文字で始まる別の大文字小文字に従います)。これらはコンパイルには実際には影響しません (VS 2010 では展開さえされません)。インライン API ドキュメント用です。

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

ここで古い装飾の完全な説明を得ることができます。

于 2012-03-23T05:51:00.020 に答える
8

Nercolis の回答によると、これらは SAL 注釈属性です。ただし、これらは社内用またはAPI ドキュメント用だけのものではありません。本当の目的はコード分析です。/analyzeコンパイラ オプション ([プロジェクト プロパティ]、[コード分析] -> [全般])を使用してプロジェクトをビルドすると、これらはコーディングの問題を見つける上で重要な役割を果たします。

たとえば、特定のポインター引数が示す場合__in、null ポインターを渡してはなりません。この関数は null をチェックしないため、SEH が発生する可能性があります。__in_opt引数は null の可能性があります。コンパイラが問題を検出すると、警告として報告します。この記事を参照してください。

于 2017-07-05T12:13:18.277 に答える