printfのパラメータチェック__attribute __((形式(printfの、1、2)))

GCCでは、私が指定することができ__attribute__((format(printf, 1, 2)))、この関数はprintfの書式指定子です可変引数のパラメータを取ることをコンパイラに伝えます。

これは私がvsprintfの機能ファミリを例えばラップのケースで非常に有用です。私は持てますextern void log_error(const char *format, ...) __attribute__((format(printf, 1, 2)));

そして、私はこの関数を呼び出すたび、GCCは、それがprintf関数の場合と同じようなタイプと引数の数が与えられた書式指定子に適合していることを確認し、警告をそうでない場合は発行されます。

マイクロソフトC / C ++コンパイラは、類似した何かを持っていますか?

 

GCCチェック書式指定子が-Wformatが有効になっている場合が、これに相当するものはありませんので、VC ++はさえ、標準的な機能のために、そのようなチェックを持っていない__attribute__-Wformatに相当するものがないので。

私はC ++(唯一のC89をサポートしながら、C ++のISO準拠を維持することによって証明される)上のMicrosoftの重点は、部分的にVC ++は、書式指定子のチェックを持っていない理由かもしれないと思います。C ++で使用する<iostream>書式指定は不要です。

 

https://stackoverflow.com/questions/2354784/attribute-formatprintf-1-2-for-msvc

おすすめ

転載: www.cnblogs.com/liujx2019/p/11978504.html