当扩展 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;
}
我的问题:
- 为什么我会收到这么多行!?
- C 运行 这么多行怎么能这么快?
- 这么多行有问题吗?
-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 预处理器的工作方式,无需担心 :)
我一直在试验 C 的宏,并决定扩展它们以查看替代品。当我为 gcc 提供 -E
时,我得到 800 行代码只是为了这个简单的代码:
#include <stdio.h>
#define TEN 10
int main(void) {
printf("hello world %d", TEN);
return 0;
}
我的问题:
- 为什么我会收到这么多行!?
- C 运行 这么多行怎么能这么快?
- 这么多行有问题吗?
-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 预处理器的工作方式,无需担心 :)