【问题标题】:Number of translation units vs number of cpp files翻译单元数与 cpp 文件数
【发布时间】:2019-09-20 11:41:05
【问题描述】:

我们有 2 个案例(场景)。在每种情况下,我们都有 2 个文件:main.cppfile.cpp

案例 1

  • main.cpp:
#include <iostream>

#include "file.cpp"  // this line is what matters

int main () {...}

我通过以下方式编译和运行:

g++ main.cpp -o main && ./main

案例 2

  • main.cpp:
#include <iostream>

void filefunc(int); // function declaration from file.cpp

int main () {...}

我通过以下方式编译和运行:

g++ -c main.cpp
g++ -c file.cpp
g++ main.o file.o -o main && ./main

每种情况下我们有多少个translation units?是吗:

  • 第一个
  • 二为二

【问题讨论】:

  • 为什么投反对票??

标签: c++ translation-unit


【解决方案1】:

每次你将一个源代码文件传递给g++,就是一个翻译单元。根据定义。

文件扩展名实际上无关紧要,但通常我们将“.cpp”保留给我们传递给编译器的东西,而不是我们#include 的东西。

在第一种情况下,您不明智地包含 .cpp 文件会导致单个翻译单元,这会使您的程序员同事感到困惑并导致代码审查被拒绝。

在第二种情况下,您有两个翻译单元。

这一次,最终结果——可执行文件——是一样的。

【讨论】:

  • 请注意,在您传递给编译器位的那个翻译单元上,实际上可以通过多次将特定文件传递给编译器来获得比源文件更多的 TU(可能使用不同的预处理器)符号定义)
  • @SornelHaetir 示例?
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 2021-12-31
  • 2011-11-01
  • 2019-05-30
  • 2018-08-25
相关资源
最近更新 更多