4

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

次の C のコードを見ました。

DWORD  GetFileVer(__in LPTSTR FileName, __out LPTSTR lpVersion, __in DWORD nSize)
{
...
}

コンパイルしようとしましたが失敗しました。__in誰が何を__out意味するのか教えてもらえますか?MSDN を調べましたが、有益な情報は見つかりませんでした。ありがとう。

4

2 に答える 2

6

__inMicrosoft のソースコード注釈言語(SAL)__outの一部です。

ソース コードの注釈を使用することで、コードの背後にある意図を明確にすることができます。また、これらの注釈により、自動静的分析ツールがコードをより正確に分析できるようになり、誤検知と誤検知が大幅に減少します。

これらは、単純なエラーについてコードを分析するために Microsoft ツールによって使用されます。ここで、ヘッダーで使用される単純なプリミティブ アノテーションのほとんどを確認できます。

  • _in

    関数はバッファから読み取ります。呼び出し元は、バッファーを提供して初期化します。

...

  • _out

    関数はバッファに書き込みます。戻り値または とともに使用すると_deref、関数はバッファを提供して初期化します。それ以外の場合は、呼び出し元がバッファーを提供し、関数がそれを初期化します。

より複雑な注釈については、ここで読むことができます。これは、Windows 8 開発者が固執することをお勧めするものです。

Jamesが指摘したように、プリプロセッサ定義を使用してそれらを無視できます。

#define _in 
#define _out

... 等々。

于 2012-09-04T01:46:53.633 に答える
1

それらは、パラメーターがどのように使用されるかをプログラマーに伝えるためにあります。__inパラメータが読み取り専用であることを意味します。つまり、パラメータへの変更は呼び出し元には表示されません。__outつまり、パラメータは関数によって埋められ、データは呼び出し元によって使用されます。あなたはただすることができます

#define __in

#define __out

プログラムをコンパイルします。

ドキュメントも読んでください。

于 2012-09-04T01:36:54.337 に答える