如何将内存分配给宏?

Rad*_*gia -7 c

对于下面的代码,我定义了一个宏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中实际上是非法的,因此编译器在完全拒绝代码时是合理的.