gpt4 book ai didi

c++ - 如果在宏中声明一个变量会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:15 26 4
gpt4 key购买 nike

假设我有一个这样定义的宏:

#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?我可以使用什么技巧来保证任何类型的唯一性(除了使内部变量具有乱码名称,从而使其他人不太可能使用相同的名称)?

(理想情况下函数对此更有用,但我的特殊情况不允许这样做)

最佳答案

如果我们考虑变量的作用域,则可以保证 do..while() 中的 a,b 与外部定义的不同。

对于您的情况,外部定义的 a,b 将不存在于 do..while() 中。

使用 MACRO 时需要注意很多事项。

关于c++ - 如果在宏中声明一个变量会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com