替代do {} while(false)的宏

onq*_*tam 2 c++

这是代码:

#define myMacro()   \
    {               \
        macro stuff \
    } ((void)0)
Run Code Online (Sandbox Code Playgroud)

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

那么有什么缺点或者这是否真的优于/同时?

tan*_*grs 7

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

void test() {
    if (1)
        myMacro();
    else
        myMacro();
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

error: expected expression
        else
        ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

话虽这么说,大多数优化编译器应该识别do { } while(0)模式并优化它.我不确定你编译的代码库是什么代替了这些构造的15倍速度.