- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
所以我完成了我的第一个 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/
今天我在一个 Java 应用程序中看到了几种不同的加载文件的方法。 文件:/ 文件:// 文件:/// 这三个 URL 开头有什么区别?使用它们的首选方式是什么? 非常感谢 斯特凡 最佳答案 file
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个 javascript 文件,并且在该方法中有一个“测试”方法,我喜欢调用 C# 函数。 c# 函数与 javascript 文件不在同一文件中。 它位于 .cs 文件中。那么我该如何管理 j
需要检查我使用的文件/目录的权限 //filePath = path of file/directory access denied by user ( in windows ) File fil
我在一个目录中有很多 java 文件,我想在我的 Intellij 项目中使用它。但是我不想每次开始一个新项目时都将 java 文件复制到我的项目中。 我知道我可以在 Visual Studio 和
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有 3 个组件的 Twig 文件: 文件 1: {# content-here #} 文件 2: {{ title-here }} {# content-here #}
我得到了 mod_ldap.c 和 mod_authnz_ldap.c 文件。我需要使用 Linux 命令的 mod_ldap.so 和 mod_authnz_ldap.so 文件。 最佳答案 从 c
我想使用PIE在我的项目中使用 IE7。 但是我不明白的是,我只能在网络服务器上使用 .htc 文件吗? 我可以在没有网络服务器的情况下通过浏览器加载的本地页面中使用它吗? 我在 PIE 的文档中看到
我在 CI 管道中考虑这一点,我应该首先构建和测试我的应用程序,结果应该是一个 docker 镜像。 我想知道使用构建环境在构建服务器上构建然后运行测试是否更常见。也许为此使用构建脚本。最后只需将 j
using namespace std; struct WebSites { string siteName; int rank; string getSiteName() {
我是 Linux 新手,目前正在尝试使用 ginkgo USB-CAN 接口(interface) 的 API 编程功能。为了使用 C++ 对 API 进行编程,他们提供了库文件,其中包含三个带有 .
我刚学C语言,在实现一个程序时遇到了问题将 test.txt 文件作为程序的输入。 test.txt 文件的内容是: 1 30 30 40 50 60 2 40 30 50 60 60 3 30 20
如何连接两个tcpdump文件,使一个流量在文件中出现一个接一个?具体来说,我想“乘以”一个 tcpdump 文件,这样所有的 session 将一个接一个地按顺序重复几次。 最佳答案 mergeca
我有一个名为 input.MP4 的文件,它已损坏。它来自闭路电视摄像机。我什么都试过了,ffmpeg , VLC 转换,没有运气。但是,我使用了 mediainfo和 exiftool并提取以下信息
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
给定一个 gzip 文件 Z,如果我将其解压缩为 Z',有什么办法可以重新压缩它以恢复完全相同的 gzip 文件 Z?在粗略阅读了 DEFLATE 格式后,我猜不会,因为任何给定的文件都可能在 DEF
我必须从数据库向我的邮件 ID 发送一封带有附件的邮件。 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Adventure Works Admin
我有一个大的 M4B 文件和一个 CUE 文件。我想将其拆分为多个 M4B 文件,或将其拆分为多个 MP3 文件(以前首选)。 我想在命令行中执行此操作(OS X,但如果需要可以使用 Linux),而
快速提问。我有一个没有实现文件的类的项目。 然后在 AppDelegate 我有: #import "AppDelegate.h" #import "SomeClass.h" @interface A
我是一名优秀的程序员,十分优秀!