首页 > 解决方案 > 翻译单元数与 cpp 文件数

问题描述

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

情况1

#include <iostream>

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

int main () {...}

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

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

案例2

#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

解决方案


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

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

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

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

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


推荐阅读