翻译单元数与 cpp 文件数

Number of translation units vs number of cpp files

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

案例一

#include <iostream>

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

int main () {...}

我编译并运行通过做:

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

案例二

#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?是吗:

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

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

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

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

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