次のようにマクロを定義したいと思います。
#define MYCheckedCall(stmnt) do { \
status_t status = (stmnt); \
if (MYFail(status)) { \
MYLog("Statement failed!"); \
} \
} while (0)
そして、数回の呼び出しごとにアプリケーション全体でそれを使用します。どこでもコードを繰り返すのと比較して、これのパフォーマンス特性は何ですか?(つまり、status_tを1回だけ定義し、追加の{}スコープは定義しません)
注意すべき点のカップル:
- これにより、スタックにフレームが追加され(変数を格納するため
status_t
)、パフォーマンスに対する私の好奇心が高まります。 - status_tは
typedef int status_t
または類似のものです。 - これは、ライブラリ全体のコードの半分のように使用されます。
これは少し時期尚早の最適化であることを私は知っていますが、それは些細な決定であるはずだったので、それにもかかわらずそれについて知りたいですか?
現在のコードの例(マクロなし):
status_t status = 0;
status = call1();
if (MYFail(status)) MYLog("call1 failed!");
status = call2();
if (MYFail(status)) MYLog("call2 failed!");
マクロでどのようにしたいかの例:
MYCheckedCall( call1() );
MYCheckedCall( call2() );
私がC初心者であり、この種の機能を実装するためのより良いパターン/方法がある場合は、それについても知りたいと思います。
Mac OSX10.7でclang/llvm-gccを使用しています。