这是代码:

#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倍的加速。

08-04 00:19