我一直在试验C的宏,决定把它们展开来看看替换。当我给gcc提供 -E
我得到了800行代码,只是这个简单的代码。
#include <stdio.h>
#define TEN 10
int main(void) {
printf("hello world %d", TEN);
return 0;
}
我的问题是:
选项要求gcc在预处理器阶段后不编译而停止,所以你最终得到的是(本质上)你系统的整个 stdio.h
文件复制并粘贴到你的程序头中。这肯定是800行程序的来源。
但这不是问题,因为当你编译你的约800行程序时,在 stdio.h
在你的代码中不用的,不会占用你的可执行文件的空间。
至于'C语言怎么能用那么多行来运行这么快',要记住,我们写的源代码不是机器执行的,机器执行的是编译器根据源代码生成的编译二进制文件。
如果你去掉 #define TEN 10
并将printf行改为 printf("hello world %d",10);
并运行 gcc
与 -E
再次,你会发现几乎和之前一样的800行源文件。这不是一个关于 #define
这只是C预处理器的工作方式,没什么好担心的 :)