社区
C++ 语言
帖子详情
什么是编译单元
elephone
2007-02-11 10:30:10
什么是编译单元
(当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。这个编译单元会被编译成为一个与cpp 文件名同名的目标文件(.o或是.obj) 。连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。)
上面解释的看不懂
希望高手给我通俗的解释一下
...全文
1500
10
打赏
收藏
什么是编译单元
什么是编译单元 (当一个c或cpp文件在编译时,预处理器首先递归包含头文件,形成一个含有所有 必要信息的单个源文件,这个源文件就是一个编译单元。这个编译单元会被编译成为一个与cpp 文件名同名的目标文件(.o或是.obj) 。连接程序把不同编译单元中产生的符号联系起来,构成一个可执行程序。) 上面解释的看不懂 希望高手给我通俗的解释一下
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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文件。
LeetCode-94. Binary Tree Inorder Traversal [C++][Java]
Given therootof a binary tree, returnthe inorder traversal of its nodes' values.
Leetcode94. Binary Tree Inorder Traversal
Leetcode94. Binary Tree Inorder Traversal 文章目录Leetcode94. Binary Tree Inorder Traversal解法一 经典递归解法二 基于栈的遍历解法三 Morris Traversal(利用线索二叉树)图解莫里斯方法C++解法 Given a binary tree, return the inorder traversal of...
【LeetCode】 94 Binary Tree Inorder Traversal
题目描述 Given the root of a binary tree, return the inorder traversal of its nodes' values. Example 1: Input: root = [1,null,2,3]Output: [1,3,2] Example 2: Input: root = [1,2]Output: [2,1] Example 3:Input: root = []Output: [] Constraints: T...
【Leetcode】94. Binary Tree Inorder Traversal
递归的过程是,从树根开始一路向左,同时记录住一路经过的节点,直到向左走到null后回退一步,打印节点,接着向其右子树拐过去,继续重复一路向左,直到右子树遍历完后,回退到树根的上一个节点,打印之,再拐入右子树继续重复。所以用栈来模拟的话就是,先从树根出发一路向左,同时将路径上所有节点按顺序入栈,直到走到null,走到null后,栈里弹出来一个节点就可以访问之了,因为其左子树是空。概括起来就是:树根出发,无前驱就向右走,有前驱则找前驱,前驱无桥则搭桥向左走,前驱有桥则拆桥向右走。法3:Morris遍历。
LeetCode94——Binary Tree Inorder Traversal
题目链接 Given a binary tree, return theinordertraversal of its nodes' values. Example: Input: [1,null,2,3] 1 \ 2 / 3 Output: [1,3,2] Follow up:Recursive solution is trivial, c...
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章