玩一个宏,想想下面的场景。为变量声明一个已经存在于调用宏的函数中的宏,为什么编译器不会抱怨。当我在代码声明一个变量,它给我一个警告:为什么我在函数中已经存在的宏中声明一个具有相同名称的变量时不会收到警告?
重新界定为“临时”
的我认为这是预期的行为,并在标准(ANSI C)进行记录,但找不到在哪里。
例如这样的代码:
#define TEST() { \
int temp = 10; \
}
int main() {
int temp = 999;
printf("\ntemp: %d", temp);
TEST();
printf("\ntemp: %d", temp);
}
这是什么意思?用一个已经在函数内部使用过的变量做宏? – Anatoly
@Anatoly:“做这个”塞巴斯蒂安提到了“影子变数”。如果你收到这样的警告,那么清理你的代码是一个好主意,因为阴影可能是错误和头痛的原因。 – Jens
@Jens,谢谢! – Anatoly