我来自一个脚本背景,C 语言的预处理器对我来说总是很难看。尽管如此,当我学习编写小型 C 程序时,我还是接受了它。我只是真正使用预处理器来包含我为自己的函数编写的标准库和头文件。
我的问题是,为什么 C 程序员不跳过所有的包含,只是连接他们的 C 源文件,然后编译它?如果您将所有的包含放在一个地方,那么您只需要定义一次您需要的内容,而不是放在所有的源文件中。
下面是我所描述的一个例子,这里我有三个文件:
// includes.c
#include <stdio.h>
// main.c
int main() {
foo();
printf("world\n");
return 0;
}
// foo.c
void foo() {
printf("Hello ");
}
通过在 Makefile 中执行类似 cat *.c > to_compile.c && gcc -o myprogram to_compile.c
的操作,我可以减少编写的代码量。
这意味着我不必为我创建的每个函数写一个头文件(因为它们已经在主源文件中了) ,这也意味着我不必在我创建的每个文件中包含标准库。我觉得这是个好主意!
然而,我意识到 C 是一种非常成熟的编程语言,我想象着其他比我聪明得多的人已经有了这个想法,并决定不使用它。为什么不呢?