我想按照以下方式定义一个宏:
#define MYCheckedCall(stmnt) do { \
status_t status = (stmnt); \
if (MYFail(status)) { \
MYLog("Statement failed!"); \
} \
} while (0)
每隔几次调用就在整个应用程序中使用它。与到处重复代码相比,它的性能特征是什么?(即只定义 status_t 一次,没有额外的 {} 范围)
需要注意的几点:
- 这会在堆栈中添加一个框架(以存储
status_t
变量),因此我对 perf 感到好奇。 - 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 OS X 10.7 上使用 clang/llvm-gcc。