构建一个可执行文件,如果是单个 cpp 文件
Building an executable out if a single cpp file
我知道有类似的帖子,但我觉得我的问题足够具体,仍然可以问他们。 假设我选择通过将实际定义放在头文件中来构建可执行文件,然后将它们全部包含在单个 cpp 文件中。
如果我理解正确,它的含义只会影响构建过程,即编译和链接,而不会影响运行时性能。是真的吗?
此外,编译时间应该更长,而链接时间应该更短。难道不应该这样吗?如果没有,增加编译时间真的是没有人构建这样的应用程序的唯一原因吗?
一个短 TL;编译过程的 DR。编译器首先运行执行预处理器指令的预处理器(即开头带有哈希的行,例如包含)。
include 指令只是将文件的内容复制到另一个文件中。因此,在包含的文件(通常为头文件)中移动内容在这方面不会有太大变化。我们只是去掉定义,因为每个翻译单元(将其视为预处理器运行后的一个.cpp,并插入包含的文件)必须对每个事物只有一个定义。在标头中包含定义使得这种情况难以避免。
因此,一个翻译单元的编译或多或少是相同的。除了多重定义之外,问题在于,当头文件被修改时,包含它的所有其他文件都必须重新编译。如果它是一个广泛使用的标头,这可能需要一段时间。另一方面,如果修改了.cpp文件,则只会重新编译它。
由于预处理器基本上执行文本操作,因此可执行文件应该是相同的。
相关文章:
- 如果没有malloc,链表实现将失败
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如果类仅通过要求启用单个成员函数,仍然可以模棱两可地超载
- 构建一个可执行文件,如果是单个 cpp 文件
- C 如果一个线程写入Bool曾经完成,则可以安全地阅读单个线程中的循环中的Bool
- 为什么在C 11中推荐的值(如果需要副本),如果const引用也只花费单个副本,则建议通过值(如果需要副本)
- 如果存在查询图像,则可以通过数据库中的单个图像获得面部识别
- 如果根本不使用单个取消引用运算符,指向指针的指针打印什么值
- 我是否可以使用单个 SetSubclassWindow 过程来子类化多个编辑控件,如果可以,如何做到这一点
- 如果条件为单个和 (&)
- 如何在单遍历中找到单个链表的中间节点(如果链表的长度未给定)
- 如果一个应用程序中的多个线程调用单个DLL会发生什么?
- c++:如果发生段错误或类似的事情,是否有一种方法可以终止单个线程,但保持应用程序运行