我想根据以下内容定义一个宏:
#define MYCheckedCall(stmnt) do { \
status_t status = (stmnt); \
if (MYFail(status)) { \
MYLog("Statement failed!"); \
} \
} while (0)
Run Code Online (Sandbox Code Playgroud)
每隔几次调用就可以在整个应用程序中使用它 这与每个地方重复代码的性能特征有什么关系?(即只定义status_t一次,没有额外的{}范围)
几点需要注意:
status_t
变量),因此我对perf的好奇心.typedef int status_t
或类似的东西.我知道这有点过早的优化,但只是想知道它,因为它似乎应该是一个微不足道的决定?
代码现在看起来像什么的例子(没有宏):
status_t status = 0;
status = call1();
if (MYFail(status)) MYLog("call1 failed!");
status = call2();
if (MYFail(status)) MYLog("call2 failed!");
Run Code Online (Sandbox Code Playgroud)
我希望它与宏的例子:
MYCheckedCall( call1() );
MYCheckedCall( call2() );
Run Code Online (Sandbox Code Playgroud)
如果我只是C菜鸟并且有更好的模式/方式来实现这种功能,我也很想知道它.
我在Mac OS X 10.7上使用clang/llvm-gcc.
假设status_t
是一个整数类型,我希望status
每次存储在寄存器中或者最坏的同一个堆栈槽中的开销为零; 编译器不会打扰调整堆栈,因为它只能保留函数入口所需的最大堆栈空间并重用相同的堆栈槽.
一如既往,如果您感兴趣,应检查汇编程序输出以确认这是编译器的作用.