据我所知,C+标准不知道头文件和源文件之间的区别。就语言而言,任何带有法律代码的文本文件都与任何其他文本文件相同。不过,虽然不违法,但将源文件包括在程序中,这将大大消除从分离源文件中获得的任何优势。
本质上,什么#include
是告诉预处理器若要获取已指定的整个文件,并将其复制到活动文件中,请在编译器把手放在上面。因此,当您将项目中的所有源文件合并在一起时,您所做的工作与创建一个大型源文件之间根本没有区别,根本没有任何分离。
“哦,这没什么大不了的。如果它运行的话,就好了,”我听见你哭了。从某种意义上说,你是对的。但是现在你要处理的是一个很小的程序,还有一个很好的、相对不受约束的CPU来为你编译它。你不会总是那么幸运的。
如果你深入到严肃的计算机编程领域,你将看到的项目线数可能达到数百万,而不是几十个。很多台词。如果你想在一台现代桌面电脑上编译其中的一个,它可能需要几个小时而不是几秒钟。
“哦,不!这听起来很可怕!但是我能阻止这种可怕的命运吗?”不幸的是,你对此无能为力。如果编译需要几个小时,那么编译就需要几个小时。但这只是第一次真正重要的是-一旦你编译了一次,就没有理由再编译一次了。
除非你改变了什么。
现在,如果有两百万行代码合并成一个巨大的庞然大物,并且需要做一个简单的bug修复,比如说,x = y + 1
,这意味着您必须再次编译所有200万行才能测试这一点。如果你发现你想做一个x = y - 1
相反,仍然有两百万行编译在等待您。这是浪费了很多时间,可以花在其他任何事情上。
“但我讨厌没有效率!要是有办法就好了。”编译我的代码库的不同部分链接后来他们在一起!“理论上是个好主意。但是,如果您的程序需要知道不同文件中发生了什么呢?除非您想要运行一堆很小的.exe文件,否则不可能完全分离您的代码库。
“但是这肯定是有可能的!否则编程听起来就像纯粹的折磨!如果我找到了分离的方法,该怎么办?”接口与实现?比如说,从这些不同的代码段中获取足够的信息,将它们识别到程序的其余部分,并将它们放在某种类型的代码段中。标头用档案代替?那样的话,我可以用#include
预处理指令只提供编译所需的信息!“
嗯。你可能发现了一些东西。告诉我这对你来说是怎么回事。