19

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

私の最初の調査によると、これらは単純に次のように設定されています。

#define __in 
#define __out
#define __in_opt

つまり、プリプロセッサパスでは何も置き換えられません。それらは機能のない単なる文書化方法ですか?

もしそうなら、私はこのように一列にコードを文書化することの利点を見ることができます。doxygenのようなものでは、パラメーター名を2回書き出す必要があります。したがって、これは理論的には重複を減らし、一貫性を維持するのに役立ちます...

私には、どのように機能するかについての理論がありません__allowed()

4

4 に答える 4

24

これらは、ソースコード注釈言語のSAL注釈です。Microsoftのツールはそれに依存しています。MSDNライブラリの記事はこちらです。良い例はコード分析です。もう1つのまったく関係のないツールですが、これらのアノテーションによって強化されているのがPinvokeInteropAssistantです。

于 2010-11-21T19:41:01.923 に答える
9

SALアノテーションは、次の2つの場合に役立ちます。

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

実際、コードを分析してコンパイルすると、マクロはさまざまなdeclspec式に拡張されます。私はコードでこれらの注釈を常に使用しています。

于 2010-11-21T19:39:08.140 に答える
5

これらは、Microsoftのセマンティック分析ツールでコードマークアップとして使用されます。このツールを自分で使用する予定がない限り、使用する目的はほとんどありません。

于 2010-11-21T19:38:45.220 に答える
-3

これらの Microsoft マクロは通常、何も展開されず、読者へのヒントとして意図されています。

ただし、前回チェックしたときは、たとえば、MessageBox引数のヒントが完全に間違っていて、最初、2 番目、3 番目の引数に有用なデフォルトがあることを示唆していましたが (0 を指定した場合)、実際には 1 番目と 4 番目の引数に有用なデフォルトがあります。デフォルトで「エラー」になるタイトル引数もあるかもしれませんが、それが役立つとは思いませんでした。つまり、これは単なる Microsoft の問題であり、信頼できないし、信頼すべきではないというヒントであり、誤解を招く視覚的な乱雑さです。

乾杯 & hth.,

于 2010-11-21T19:33:20.287 に答える