5
次のSALアノテーションの違いは何ですか?__deref_out_optと__deref_opt_outの違いは何ですか?
次のSALアノテーションの違いは何ですか?__deref_out_optと__deref_opt_outの違いは何ですか?
void foo(__deref_out_opt PSTR* bar);
void foo(__deref_opt_out PSTR* bar);
PSTR*
アウトパラメータは、発呼者が文字列へのポインタを受け取るバッファを通過します。
__deref_out_optでは、文字列はオプションです(関数は呼び出し元提供バッファにNULLを格納します)。
__deref_opt_outでは、バッファーはオプションです(呼び出し側は、出力値の無関係を示すためにNULLを渡します)。
おそらく、これらのコンセプトを組み合わせることができます。そのためには__deref_opt_out_opt
修飾語が必要です。
ここで、関数が出力パラメータをNULLに設定する可能性のある「その他のケース」に対して_optを配置しますか? – John
'out'の後、' __deref_out_opt'のように。 SALのドキュメントでは、 '__deref_opt'の場合を特別に記述しています。その場合、バッファは存在しないかもしれません。バッファが存在するようにしたいので、 '__deref'は平易ですが、そこに格納されているポインタはNULLにすることができるので、' _out_opt'です。 –