请问头文件和源文件有什么区别?

葛俊在新泽西 2004-04-23 11:30:05
我总结了一下自己的经验,觉得有以下几方面的区别:
1.从使用的角度讲:
源文件可以包含头文件,但是头文件不可以包含源文件。后者虽然在语法上是允许的,但是实际使用

中是不规范的用法。

2.从预处理的角度讲:
对于一个包含了多个头文件的源文件,只要用头文件的内容替换掉源文件中的对应的include语句,就可以得到预处理后的源文件。这个最终生成的源文件的编译结果就是最终的编译结果。

3.从编译的角度讲:
源文件被直接编译,也就是说源文件将直接被编译为obj文件。而头文件如果没有被任何源文件包含的话,将不会被编译。换句话说,如果一个头文件没有被任何源文件直接或者间接包含的话,那么这个头文件中即使有语法错误也不会在编译时被检测出来。

以上就是我的一些经验总结,希望能够抛砖引玉引出各位的高见。
...全文
2820 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
freefalcon 2004-04-24
  • 打赏
  • 举报
回复
头文件一般使用
#ifndef __FILENAME_H__
#define __FILENAME_H__

...........

#endif//__FILENAME_H__
的形式防止重复包含
sharkhuang 2004-04-24
  • 打赏
  • 举报
回复
没啥区别!
bshaozi 2004-04-24
  • 打赏
  • 举报
回复
vc++当插入一个类的时候
是(自动)将类的声明放在一个.h中
具体函数的实现放在.cpp中~
而不是全放在.h中
头文件只是一个接口的说明。源文件才是实现,才是干事情的。
这就是二者的区别。
Kudeet 2004-04-24
  • 打赏
  • 举报
回复
学习
runall 2004-04-24
  • 打赏
  • 举报
回复
learning
ejiue 2004-04-24
  • 打赏
  • 举报
回复
1、为什么需要头文件呢?

这是因为编译器采用分离编译的方法,对单个.cpp源文件单独编译,再连接成目标文件。
所以如果某个函数或类不在.cpp内部定义,此时就必须包含相关的头文件,以通过编译。
在连接的时候再做填空。

2、不采用头文件。

如果让stroustrup独立的设计C++,他不会采用头文件的架构。
但是为了兼容C,不得以而为之。
C#、Java都没有使用头文件、源文件的架构。

3、楼主的问题

头文件只是一个接口的说明。源文件才是实现,才是干事情的。
这就是二者的区别。
RookieStar 2004-04-23
  • 打赏
  • 举报
回复
补充第一点:头文件通用性更强(一般放进头文件中的各种语法或语义,至少在一个小范围内具有一定的通用性),可以适合多种目的不同的源文件包含。
但随之而来的是源文件在包含头文件时,记得千万避免包含上的冲突,比如标准库中带.h和不带.h为例。
angelo23 2004-04-23
  • 打赏
  • 举报
回复
关于第三点,现在很多编译器支持头文件的预编译,以提高编译效率(尤其是对于STL头文件,一堆函数在里面)
从语法上来说,头文件里面可以包含:对象声明,const对象定义,函数声明,inline函数定义,class定义,inline class member function定义,预处理命令,头文件包含

64,654

社区成员

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

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