什么是编译单元

elephone 2007-02-11 10:30:10
什么是编译单元
(当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。这个编译单元会被编译成为一个与cpp 文件名同名的目标文件(.o或是.obj) 。连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。)
上面解释的看不懂
希望高手给我通俗的解释一下
...全文
1155 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenshaobo_0 2009-10-07
  • 打赏
  • 举报
回复
一直在不明不白种。。。受教了
songdm2009 2009-10-07
  • 打赏
  • 举报
回复
学习了
Aeris 2009-10-07
  • 打赏
  • 举报
回复
注意是经过预处理后的cpp文件。经过这样处理后,所有的预处理标记(#include、#define等)全都不见了,换成了“实在”的代码。

简单的理解:头文件包含进来,所有的宏全部展开。
OOPhaisky 2007-02-11
  • 打赏
  • 举报
回复
编译单元,你就可以把它理解为:#include完头文件的内容后(即将头文件的内容粘贴到cpp中之后)的cpp文件就是编译单元。
lizhizhe2000 2007-02-11
  • 打赏
  • 举报
回复
意思是一个编译单元就是一个积木块(就是一个.obj文件),然后连接程序再把这些积木堆起来!
晨星 2007-02-11
  • 打赏
  • 举报
回复
书上说的还不明白吧?我觉得很难更清楚了。

编译单元,顾名思义,就是一次编译的单位,C/C++语言中编译器都是以被做了include递归展开的cpp文件为编译单位,这也就是最小的编译单位了。
换句话说,你可以让编译器编译一个cpp源文件,而编译器会自动处理它所包含的内容,最终把它所包含的内容以及它自身的内容编译成一个目标文件。你无法让编译器只编译某个cpp文件中的某一个具体的变量或函数。

之所以书上常说“编译单元”,而不说“cpp文件”,就是因为前者表意更准确。如果直接说“C++编译器每次把一个个的cpp文件的内容编译成目标文件”,那人家就会抬杠:啥?只编译cpp文件的内容?那被它所包含的头文件的内容就不管了吗?

所以,C++编译器每次编译的可能仅仅是一个文件,也可能是通过包含关系关联在一起的多个文件,不管是最终是几个文件,总之,这个概念就叫“一个编译单元”。
htqx 2007-02-11
  • 打赏
  • 举报
回复

一个cpp 就是一个编译单元, 会编译成obj.

所谓的static , extern 就是相对编译单元来说的,个个编译单元共享是extern,独立是static
WinWing 2007-02-11
  • 打赏
  • 举报
回复
看过编译原理没有?2楼正解
-----------------------------------------------------------------------------------
编译单元,你就可以把它理解为:#include完头文件的内容后(即将头文件的内容粘贴到cpp中之后)的cpp文件就是编译单元。
tiancaiak 2007-02-11
  • 打赏
  • 举报
回复
编译单元
-----------
经过预处理之后的文件(这个是内存中的临时文件)
#include在预处理时被展开,宏也一样

一个经过展开后的.cpp文件就是一个编译单元

一个xx.h(经过预处理) + 一个xx.cpp = 一个编译单元
一个编译单元(经过编译)= xx.obj
整个程序的多个.obj加起来(经过链接) = .exe(可执行文件)


预处理
-----------
把一些带#号的,比方说宏定义,预处理命令(#include)等

duyanning 2007-02-11
  • 打赏
  • 举报
回复
意思是一个编译单元就是一个积木块(就是一个.obj文件),然后连接程序再把这些积木堆起来!
===============================================
这个不对!
楼上正解。
简单说,一个编译单元就是一个经过预处理的cpp文件。

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧