编译器是否会为C语言中的宏禁用的代码分配任何内存?

Jay*_*a A 2 c

例如:

int main()
{
   fun();//calling a fun
}

void fun(void)
{
    #if 0
    int a = 4;
    int b = 5;
    #endif
}
Run Code Online (Sandbox Code Playgroud)

功能的大小是fun()多少?什么是为main()功能创建的总内存?

Som*_*ude 9

C源文件的编译分多个阶段完成.预处理器运行的阶段在编译代码的阶段之前完成.

"编译器"甚至看不到预处理器已删除的代码; 从它的角度来看,功能很简单

void fun(void)
{
}
Run Code Online (Sandbox Code Playgroud)

现在,如果函数将"创建内存"取决于编译器及其优化.对于调试版本,该函数可能仍然存在并被调用.对于优化的发布版本,编译器可能不会调用甚至保留(生成函数的样板代码).