我碰到一个项目来了一架C性向问题网站为什么宏的值在被调用函数中没有变化?
#define i 20
void fun();
int main(void)
{
printf("%d..",i);
fun();
printf("%d",i);
}
void fun() {
#undef i;
#define i 30
}
这里的输出变成
20..20
但据我来说,这应该是
20..30
为什么多申” t i
的值在拨打fun()
后变为30?
#define i 20
void fun();
int main(void)
{
printf("%d..",i);
#define i 50
printf("%d",i);
}
但是,如果我编译并运行上述程序的输出变成20..50 那么现在怎么宏值在运行时更改。
答案在于预处理器和编译器之间的区别。搜索网络的一些信息,它应该很清楚。 – 2015-02-08 13:43:59
在运行程序之前,甚至在编译之前处理宏。让你的编译器写出“预处理”的代码,你会看到“我”做什么。 (另外:绝对不要在“define”中包含分号,用你明显的经验水平,你**会得到一些令人讨厌的惊喜!) – usr2564301 2015-02-08 13:45:52