__in __out __in_opt __allowed() の目的は何ですか?どのように機能しますか?自分のコードでも同様の構造を使用する必要がありますか?

StackOverflow https://stackoverflow.com/questions/4239809

  •  27-09-2019
  •  | 
  •  

質問

これらのプリプロセッサ定義の一部は、WinMain 関数およびその他の Windows ライブラリ関数に含まれています。彼らの目的は何でしょうか?それらはどのように機能するのでしょうか?また、それらを実装または関数呼び出しに書き込むことは良い習慣ですか?

私の最初の調査によると、これらは単に次のものと同等に設定されているだけです。

#define __in 
#define __out
#define __in_opt

つまり、次のように置き換えられます 何もない プリプロセッサパスで。これらは単なる文書化手段であり、機能はありませんか?

そうであれば、このようにコードをインラインで文書化する利点がわかります。doxygen などでは、パラメータ名を 2 回書き出す必要があります。したがって、これは理論的には重複を減らし、一貫性を維持するのに役立つ可能性があります...

その方法については理論がありません __allowed() 機能するはずです。

役に立ちましたか?

解決

これらは、ソースコード注釈言語でSALの注釈です。マイクロソフトツールは、それに依存します。 href="http://msdn.microsoft.com/en-us/library/ms235402.aspx"> のです。良い例は、コード分析です。 PInvokeの相互運用アシスタントもうかなり無関係なツールは、これらのアノテーションによって力を与えている。

他のヒント

SAL アノテーションは次の 2 つの目的で役立ちます。

  • PREfast による静的解析 (/analyze でコンパイル)
  • 人間の読者は、注釈を見て関数を呼び出す方法を理解し、入出力パラメータを迅速に決定できます。

実際、マクロは、分析をオンにしてコードをコンパイルすると、さまざまな declspec 式に展開されます。私はコード内で常にこれらのアノテーションを使用します。

彼らは、コードのマークアップとして、マイクロソフト意味解析ツールで使用しています。自分でこのツールを使用する予定がない限り、それらを使用して、ほとんどの目的にあります。

これらのマイクロソフトのマクロは一般的に何に展開し、読者へのヒントとして意図されています。

私は、例えば確認しかし、最後の時間現実にはそれが役に立つデフォルトを持っている第一及び第四引数の間、MessageBox引数にヒンティングは、(0を指定する場合)第一、第二、第三引数は便利なデフォルトを持っていたことをほのめかし、完全に間違っていました。たぶんまた、私はそれが有用であることが分かったことがありません「エラー」デフォルトが、タイトル引数。だから、それはヒントあなたがすることができず、ただ視覚的な混乱誤解を招く、頼るべきではないと、ただのMicrosoftのことだ。

乾杯&HTH。、

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