这是代码:
#define myMacro() \
{ \
macro stuff \
} ((void)0)
Run Code Online (Sandbox Code Playgroud)
这不比do {} while(false)构造更好吗?没有分支,编译时间应该更快 - 并且仍然一切都是作用域的,它后面需要一个分号 - 对我来说似乎很完美!
那么有什么缺点或者这是否真的优于/同时?
您的替代构造不适用于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倍速度.
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |