我们知道多行宏必须包含在 do while(0) 循环中,才能安全地包含在代码中的任何位置。
例如,这是 100% 安全的:
#define swap( a , b ) \
do \
{ \
int t = a ; \
a = b ; \
b = t ; \
} \
while(0)
我想知道在循环之外有一个包含部分代码的宏是否也是安全的,如果不是,在什么情况下会出现问题。
#define swap( a , b ) \
int t ; \ //should be in the same scope where the macro was called and before the loop
do \
{ \
t = a ; \
a = b ; \
b = t ; \
} \
while(0)
有没有一种安全的方法来实现这一点,必须改变什么或者如果它不安全我应该遵循什么规则。