gpt4 book ai didi

c++ - 为什么我不应该包含 cpp 文件而使用 header ?

转载 作者:IT老高 更新时间:2023-10-28 11:33:19 25 4
gpt4 key购买 nike

所以我完成了我的第一个 C++ 编程作业并获得了我的成绩。但是根据评分,我失去了包括cpp文件而不是编译和链接它们的标记。我不太清楚这意味着什么。

回顾一下我的代码,我选择不为我的类创建头文件,而是在 cpp 文件中做了所有事情(如果没有头文件,它似乎也能正常工作......)。我猜评分员的意思是我写了'#include“mycppfile.cpp”;'在我的一些文件中。

#include'ing cpp 文件的原因是:- 应该进入头文件的所有内容都在我的cpp文件中,所以我假装它就像一个头文件- 在monkey-see-monkey do fashion中,我看到其他头文件在文件中#include,所以我对我的cpp文件做了同样的事情。

那么我到底做错了什么,为什么不好?

最佳答案

据我所知,C++ 标准不知道头文件和源文件之间的区别。就语言而言,任何具有合法代码的文本文件都与其他文本文件相同。然而,虽然不违法,但在程序中包含源文件几乎会消除您从一开始就分离源文件所获得的任何优势。

基本上,#include 所做的是告诉 预处理器 获取您指定的整个文件,并将其复制到 编译器之前的事件文件中 得到它的手。因此,当您将项目中的所有源文件包含在一起时,您所做的与仅制作一个巨大的源文件而根本没有任何分离之间根本没有区别。

“哦,这没什么大不了的。如果它运行,那就好了,”我听到你哭了。从某种意义上说,你是对的。但是现在您正在处理一个很小的小程序,以及一个不错且相对不受阻碍的 CPU 来为您编译它。你不会总是那么幸运。

如果您深入研究过严肃的计算机编程领域,您会看到项目的行数可以达到数百万,而不是数十。那是很多行。如果您尝试在现代台式计算机上编译其中一个,则可能需要几小时而不是几秒钟。

“哦,不!这听起来很可怕!但是我能阻止这种可怕的命运吗?!”不幸的是,您对此无能为力。如果编译需要几个小时,那么编译需要几个小时。但这只有第一次才真正重要——一旦你编译过一次,就没有理由再次编译了。

除非你改变一些东西。

现在,如果您将 200 万行代码合并为一个庞然大物,并且需要进行简单的错误修复,例如 x = y + 1,这意味着您有再次编译所有两百万行以对此进行测试。而且,如果您发现您打算改为执行 x = y - 1 ,那么同样有两百万行编译在等着您。浪费了很多时间,本来可以花在做其他事情上的。

“但我讨厌效率低下!如果有某种方法可以单独编译我的代码库的不同部分,然后以某种方式链接它们!” 从理论上讲,这是一个绝妙的主意。但是,如果您的程序需要知道不同文件中发生的事情怎么办?除非您想运行一堆微小的 .exe 文件,否则不可能完全分离您的代码库。

“但它肯定是可能的!否则编程听起来像是纯粹的折磨!如果我找到某种方法将接口(interface)与实现分开怎么办?从这些不同的代码中获取足够的信息段来向程序的其余部分识别它们,并将它们放在某种 header 文件中?这样,我可以使用 #include 预处理器指令 只引入编译所需的信息!”

嗯。你可能会在那里做一些事情。让我知道你的效果如何。

关于c++ - 为什么我不应该包含 cpp 文件而使用 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com