C++ 翻译单位数量与cpp文件数量

C++ 翻译单位数量与cpp文件数量,c++,translation-unit,C++,Translation Unit,我们有两个案例。在每种情况下,我们都有2个文件:main.cpp和file.cpp 案例1 main.cpp: 包括 include file.cpp//重要的是这一行 int main{…} 我通过以下方式编译和运行: g++ main.cpp -o main && ./main g++ -c main.cpp g++ -c file.cpp g++ main.o file.o -o main && ./main 案例2 main.cpp: 包括 void

我们有两个案例。在每种情况下,我们都有2个文件:main.cpp和file.cpp

案例1

main.cpp: 包括 include file.cpp//重要的是这一行 int main{…} 我通过以下方式编译和运行:

g++ main.cpp -o main && ./main
g++ -c main.cpp
g++ -c file.cpp
g++ main.o file.o -o main && ./main
案例2

main.cpp: 包括 void filefuncint;//来自file.cpp的函数声明 int main{…} 我通过以下方式编译和运行:

g++ main.cpp -o main && ./main
g++ -c main.cpp
g++ -c file.cpp
g++ main.o file.o -o main && ./main
每种情况下我们有多少个翻译单位?是:

第一个一个 第二个两个
每次将源代码文件传递给g++时,这是一个翻译单元。根据定义

文件扩展名实际上是不相关的,但按照惯例,我们为传递给编译器的内容保留.cpp,而不是包含的内容

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

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


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

请注意,在这个翻译单元上,传递给编译器位的是,通过多次向编译器传递特定文件(可能使用不同的预处理器符号),实际上可能会有比源文件更多的TUdefined@SoronelHaetir例如?@MohamedBenkedadra为什么投反对票??