#include <stdio.h> #define a 10 void foo(); int main(){ printf("%d..", a); foo(); printf("%d", a); } void foo(){ #undef a #define a 50 }
10..10
10..50
Error
0
#define a 10 void foo(); void prin(); int main() { prin(); printf("%d ", a); foo(); printf("%d ", a); } void foo() { #undef a #define a 50 } void prin() { printf("%d ", a); }
对于宏定义是在.c文件变成.i文件时进行的字符串替换的过程。
在代码的开头,宏定义了a为10。所以,在main()函数中的第一个打印语句printf("%d..", a)会输出10..。
然后,foo()函数被调用。在foo()函数中,先使用#undef取消了宏a的定义,然后重新使用#define将a重新定义为50。
但是,在foo()函数内部对宏的重新定义只在该函数内部有效,作用域仅限于该函数。所以,在foo()函数调用结束后,在main()函数中的第二个打印语句printf("%d", a)仍然会输出全局作用域下的宏定义结果,即10。
因此,整个程序的输出结果是10..10。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题