对于下面的代码,我定义了一个宏abc,其值已重新定义两次.当我们运行代码时,输出是一些垃圾值,我没有得到宏如何获取垃圾值,当它是一个宏,内存不能分配给宏abc?
#include<stdio.h>
#define abc 10
#define abc "rd"
int main()
{
printf("%d",abc);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Rei*_*ica 10
宏根本不占用运行时内存,它们是一个完全编译时(实际上甚至是预处理时)的构造.在大多数情况下,您可以将宏视为纯文本替换.所以你的代码100%相当于:
#include<stdio.h>
int main()
{
printf("%d","rd");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我相信为什么这是打印垃圾值非常清楚.
此外,在没有干预的情况下将宏重新定义为其他内容#undef在C中实际上是非法的,因此编译器在完全拒绝代码时是合理的.