当扩展 c 宏时,为什么代码会变得这么大?

When c macros are expanded why does the code get so big?

我一直在试验 C 的宏,并决定扩展它们以查看替代品。当我为 gcc 提供 -E 时,我得到 800 行代码只是为了这个简单的代码:

#include <stdio.h>
#define TEN 10

int main(void) {
    printf("hello world %d", TEN);
    return 0;
}

我的问题:

-E 选项要求 gcc 在预处理器阶段后停止而不进行编译,因此您最终得到的是(基本上)您系统的整个 stdio.h 文件被复制并粘贴到程序的头文件中.这绝对是 800 行的来源。

但这不是问题,因为当您编译 ~800 行程序时,stdio.h 中您不在代码中使用的函数原型将不会占用 space 在你的可执行文件中。

至于 'how does C run so fast with that many lines' 重要的是要记住我们编写的源代码不是机器执行的,机器执行编译器从源代码生成的编译二进制文件。

如果您删除 #define TEN 10 并将 printf 行再次更改为 printf("hello world %d",10); 和 运行 gcc 以及 -E,您会发现几乎完全相同与以前相同的 ~800 行源文件。这不是 #define 的症状,这只是 C 预处理器的工作方式,无需担心 :)