对于下面的代码,我定义了一个宏abc,其值已被重新定义两次。当我们运行代码时,输出是一些垃圾值,我不明白当它是一个宏并且内存无法分配给宏abc时,宏是如何获取垃圾值的?
#include<stdio.h>
#define abc 10
#define abc "rd"
int main()
{
printf("%d",abc);
return 0;
}
最佳答案
宏根本不占用运行时内存,它们完全是编译时(实际上甚至是预处理时)构造。在大多数情况下,您可以将宏视为纯粹的文本替换。所以你的代码 100% 等价于:
#include<stdio.h>
int main()
{
printf("%d","rd");
return 0;
}
我相信很清楚为什么这是打印垃圾值。
此外,在没有 #undef
介入的情况下将宏重新定义为其他内容实际上在 C 中是非法的,因此编译器完全拒绝该代码是合理的。
关于c - 如何为宏分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50797306/