假设我定义了这样一个宏:
(理想情况下,函数对于此更有用,但我的特定情况不允许使用函数)
#define FOO(x,y) \ do { int a,b; a = f(x); b = g(x); y = a+b; } while (0)在展开宏时,GCC会保证a和b的任何形式的独特性吗?我的意思是,如果我像下面这样使用FOO:
int a = 1, b = 2; FOO(a,b);在预处理之后,代码将变成:
int a = 1, b = 2; do { int a,b; a = f(a); b = g(b); b = a+b; } while (0)编译器能够区分do{}外部的a和do{}内部的a吗?除了让内部变量具有混乱的名称以使其他人不太可能使用相同的名称外,我可以使用什么技巧来保证任何形式的独特性?
(理想情况下,函数对于此更有用,但我的特定情况不允许使用函数)