エラー処理をサポートするマクロに取り組んでいます。
#define Try(e, call) ( (e == OK) && ((e = call) != OK) )
if ステートメントの式として使用できます。
if (Try(err, SomeFunction(foo, bar))) {
// Entered only if err was OK before the if-statement and SomeFunction()
// returned a non-OK value.
}
err
if ステートメントの前に既に OK でない場合、関数は呼び出されません。if ステートメントの後、err
の戻り値が設定されますSomeFunction()
。
ここまでは順調ですね。ただし、ifステートメントなしでマクロを使用したい:
Try(err, SomeFunction(foo, bar));
この場合、GCC は次の警告を表示します。
warning: value computed is not used [-Wunused-value]
それが私の質問です。GCC がこの警告を生成しないようにマクロを書き直すにはどうすればよいでしょうか。フラグを使用して警告を無効にできることはわかっていますが (ただし、他のコードでは有効にしたままにしたい)、または結果を明示的にvoid
. 次のステートメント コードでは、警告は生成されません。
(void) Try(err, SomeFunction(foo, bar));
Try()
しかし、それぞれの前にvoid
キャストを付けるのは理想的とは言えません。助言がありますか?