这是代码:
#define myMacro() \
{ \
macro stuff \
} ((void)0)
这比
do {} while(false)
构造好吗?没有分支,编译时间应该更快-仍然限制所有范围,并且需要分号-对我来说似乎很完美!那么是否存在任何弊端,或者真的可以胜任?
最佳答案
您的替代构造不适用于if else
语句。
void test() {
if (1)
myMacro();
else
myMacro();
}
编译器错误:
error: expected expression
else
^
1 error generated.
话虽如此,大多数优化编译器都应该识别
do { } while(0)
模式并对其进行优化。我不确定您要编译的代码库是否比替换这些结构有15倍的加速。