头文件与cpp文件为什么要分开写麻烦告诉我

 我来答
真情EKq6
推荐于2016-09-18 · 超过46用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:115万
展开全部
最表面的机制是:
从动态链接库的角度看:
从软件的扩展来说:
将头文件作为界面,再去定义它的实现,这样只要保证界面不变(头文件不变),就可以只修改实现文件,而不必修改其他的实现代码。比如你有一个sort()函数来排序,在一个大程序中,你后来发现这个sort()有更好的算法,于是你只需要去修改函数的实现(修改.cpp文件的sort()函数的代码),其他使用这个函数的地方可以完全保持不变,这是分割技术的第一个好处。
从模块性来讲:
界面后面隐藏实现代码,代码具有更好的物理模块性,减小程序的复杂度。
从编译的角度看:
所有源文件都是被编译器分别划分单元来分别编译,在编译的过程中,头文件被嵌入到实现文件里面一起作为一个编译单元被编译(实现文件 filename.cpp 里的
#include "filename.h"
那一行被替换成 filename.h 里面的所有内容(实际上会把预处理指令去掉,这才是预处理最本质的作用))。
举一个简单的例子,你定义了sort()函数,在test.h头文件里声明,在test.cpp里定义,这个时候在test.cpp里面#include "test.h",并定义sort()函数。
你需要在头文件内部写预处理代码
#ifndef _TEST_H_
#define _TEST_H_
/*中间是该头文件的一系列声明*/#endif
预处理指令防止头文件被多重包含,如果你的代码出现了诡异的错误,请注意这个问题,可能是你没有写头文件保护,在符号链接阶段链接器发现有多个相同的名字,它不知道应该跟哪一个符号链接在一起,所以报错。
从节约时间的角度看:
在一些大型项目里面,编译一个项目不是整个一起同时编译的,一般情况是分别交给几个负责人去编译,测试,最后链接起来。如果中间发现有一个实现文件有BUG,只需要修改这个.cpp文件,其他的文件就可以原封不动。
再重新编译的时候,只需要单独便宜修改过的这一块,其他的部分不动。然后再链接成可执行程序。
使用连接器的两个原因:
1、.编译成目标文件的时候代码的内部符号被编译器修改过。2、目标文件被组织成一个整的大型文件,所有符号被定位,保证每一个函数调用都找得到他本身的定义位置
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式