-1

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

情况1

  • 主.cpp:
#include <iostream>

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

int main () {...}

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

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

案例2

  • 主.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?是吗 :

  • 第一个
  • 二为二
4

1 回答 1

2

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

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

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

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

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

于 2019-05-02T00:20:37.997 回答