替代do {} while(false)的宏

时间:2016-06-07 12:05:37

标签: c++

以下是代码:

#define myMacro()   \
    {               \
        macro stuff \
    } ((void)0)

这不比do {} while(false)构造更好吗?没有分支,编译时间应该更快 - 而且一切都是作用域的,它后面需要一个分号 - 对我来说似乎很完美!

有没有任何缺点,或者这是否真的优于do / while?

2 个答案:

答案 0 :(得分:7)

您的替代构造不适用于if else语句。

void test() {
    if (1)
        myMacro();
    else
        myMacro();
}

编译错误:

error: expected expression
        else
        ^
1 error generated.

话虽如此,大多数优化编译器应该识别do { } while(0)模式并对其进行优化。我不确定您编译的代码库是否会因替换这些构造而加速15倍。

答案 1 :(得分:0)

我专门使用do-while-false,以便break;可以使用do { if (Step1() == false) break; if (Step2() == false) break; if (DoMoreWork() == false) break; } while (0);

for

无法 突破不属于循环的块。 (do-whiledo-whileswitchdo-while-false)。

所以我认为你的宏有一个缺点,为什么我更喜欢 OR