提问人:Harry 提问时间:7/10/2009 最后编辑:ManuelHarry 更新时间:10/4/2023 访问量:105232
什么是 C++ 中的“翻译单元”?
What is a "translation unit" in C++?
问:
我当时正在阅读Scott Meyers撰写的“Effective C++”,并遇到了“翻译单元”一词。
有人可以给我解释以下内容吗:
它到底是什么?
在使用 C++ 编程时,我应该考虑在什么时候使用它?
是仅使用 C++,还是可以与其他编程语言一起使用?
我可能已经在不知道这个词的情况下使用它了......
答:
翻译单元在所有意图和目的上都是一个文件 (.c/.cpp),完成后包括所有头文件。
评论
这本书说得很清楚。当 Meyers 提到“翻译单元”时,他指的是源代码文件。
评论
根据标准 C++(回溯机链接): 翻译单元是基本单元 在 C++ 中编译。它包括 单个源文件的内容, 以及任何头文件的内容 直接或间接包含在其中, 减去那些被忽略的行 使用条件预处理 语句。
单个翻译单元可以是 编译成目标文件、库、 或可执行程序。
翻译单元的概念是 最常在上下文中提及 一个定义规则,以及 模板。
评论
-fdump-lang-raw
翻译单元是传递给编译器的代码。这通常意味着在 .c 文件上运行预处理器的输出。
每个 cpp/c(实现)文件都将转换为翻译单元(即目标文件 (.obj)),cpp 文件中的标头将替换为头文件中的实际文本。
一个很难明确回答的问题。C++ 标准规定:
在本国际标准中,程序的文本以称为源文件的单位保存。源文件 连同包含的所有标头 (17.4.1.2) 和源文件 (16.2) 一起,通过 预处理指令 #include,减去任何 有条件纳入 (16.1) 预处理指令,称为翻译单元。[注意:C++ 程序不需要全部翻译 同一时间。]
因此,对于大多数意图和目的,翻译单元是源文件及其包含的头 #include 机制的单个C++。
关于您的其他问题:
- 我什么时候应该考虑使用它 使用 C++ 编程时
你不能不使用它 - 翻译单元是 C++ 程序的基础。
- 如果它仅与 C++ 相关,或者它 可与其他编程一起使用 语言
其他语言也有类似的概念,但它们的语义会略有不同。例如,大多数其他语言不使用预处理器。
评论
正如其他人所说,翻译单元基本上是预处理后的源文件的内容。这是语言语法中最顶级的作品;如果您正在编写 C 或 C++ 编译器,您只需要担心它。
评论
根据 MSDN:C 和 C++ 程序由一个或多个源文件组成,每个源文件都包含程序的一些文本。源文件及其包含文件(使用 #include 预处理器指令包含的文件)但不包括由条件编译指令(如 #if)删除的代码部分,称为“转换单元”。
除了 ODR 之外,翻译单元在定义未命名命名空间中也很重要,它取代了“静态”的旧用法之一。
在我看来,“翻译单元”通常是单个“后预处理”源文件。您可以在此 MSDN 页面上获取更多详细信息。http://msdn.microsoft.com/en-us/library/bxss3ska(v=vs.80).aspx
C 和 C++ 程序由一个或多个源文件组成,每个源文件都包含程序的一些文本。源文件及其包含文件(使用 #include 预处理器指令包含的文件)但不包括由条件编译指令(如 #if)删除的代码部分,称为“转换单元”。
上一个:运算符的优先级和关联性是什么?
评论