C++ 的多行宏定义方式
Link Share :https://zhiqiang.org/coding/multi-line-macros.html
- via RSS
C++的多行宏有标准定义方式,boost
和folly
库都采用了这种方式:
#define MACRO(X) \
do { \
X = 1; \
std::cout << X; \
} while (0)
其中\
用来换行,其它最关键之处为实际运行语句用do {} while (0)
包起来。这是为什么呢?
如果直接定义如下:
#define MACRO1(X) \
X = 1; \
std::cout << X;
那么下面语句展开的结果可能不符预期:
int x = 0;
if (x == 0)
MACRO1(X);
直接用{}
包起来也不行:
#define MACRO2(X) \
{ \
X = 1; \
std::cout << X; \
}
它在下面语句展开会造成语法错误:
int x = 0;
if (x == 0)
MACRO2(X);
else
x = 2;
在标准定义中引入了多余的语句,但在现代编译器会自动优化掉这些语句,不会增加指令。
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: