C语言代码的头文件与源文件有什么区别?

 我来答
mlper_
2015-09-12 · TA获得超过8016个赞
知道大有可为答主
回答量:4863
采纳率:78%
帮助的人:1198万
展开全部
  1. 头文件和源文件在本质上没有任何区别。   只不过一般:后缀为  .h 的文件是头文件,内含函数声明、宏定义、结构体定义等内容。后缀为  .c 的文件是源文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。这样分开写成两个文件是一个良好的编程风格。

  2. 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:

  ①预处理阶段

  ②词法与语法分析阶段

  ③ 编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各         个目标文件 (.obj文件)

  ④连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关           的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格         式信 息。(生成.exe文件)

  3.比方说 在aaa.h里定义了一个函数的声明,然后在aaa.h的同一个目录下建立aaa.c , aaa.c里定义了这个函数的实现,然后是在main函数所在.c文件里#include这个aaa.h  然后我就可以使用这个函数了。 main在运行时就会找到这个定义了这个函数的aaa.c文件。这是因为:main函数为标准C/C++的程序入口,编译器会先找到该函数所在的文件。假定编译程序编译myproj.c(其中含main())时,发现它include了mylib.h(其中声明了函数void test()),那么此时编译器将按照事先设定的路径(Include路径列表及代码文件所在的路径)查找与之同名的实现文件(扩展名为.cpp或.c,此例中为mylib.c),如果找到该文件,并在其中找到该函数(此例中为void test())的实现代码,则继续编译;如果在指定目录找不到实现文件,或者在该文件及后续的各include文件中未找到实现代码,则返回一个编译错误.其实include的过程完全可以“看成”是一个文件拼接的过程,将声明和实现分别写在头文件及C文件中,或者将二者同时写在头文件中,理论上没有本质的区别。以上是所谓动态方式。对于静态方式,基本所有的C/C++编译器都支持一种链接方式被称为Static Link,即所谓静态链接。在这种方式下,我们所要做的,就是写出包含函数,类等等声明的头文件(a.h,b.h,...),以及他们对应的实现文件(a.cpp,b.cpp,...),编译程序会将其编译为静态的库文件(a.lib,b.lib,...)。在随后的代码重用过程中,我们只需要提供相应的头文件(.h)和相应的库文件(.lib),就可以使用过去的代码了。相对动态方式而言,静态方式的好处是实现代码的隐蔽性,即C++中提倡的“接口对外,实现代码不可见”。有利于库文件的转发.

kgco139
2013-10-10 · TA获得超过3626个赞
知道小有建树答主
回答量:1003
采纳率:0%
帮助的人:672万
展开全部
10 在代码正确的情况下,把代码建立成头文件,即.h时无法执行程序,而若把代码建立成源文件。即.cpp时则运行成功,说是应该建立成源文件的建立成头文件了,即"h1.h",应该建立成"h1.cpp",应该是"c++ Source File",而不是"C/C++ Header File,是怎么回事?为什么? 补充: 如果要编写一个程序,在无头文件的情况下,是先编写头文件,还是先编写源文件? 满意答案Treen3级2009-02-10大家对头文件都有一定的误解 C,C++程序,本质上只需要 .C,.CPP文件就可以.这两个文件会被编译器编译生成模块. 头文件其实就是一个额外的文本文件, #include这个预编译命令会把这个文本文件中的内容插入到这个指令的位置. 在CPP文件中使用#include命令来包含一个头文件,相当于把头文件中的代码拷贝到CPP文件中调用该预编译指令的位置. 之所以要用到头文件,那是因为在编译过程中,一个CPP中如果要调用或使用另外一个模块中的函数或其它符号,就必须先写这个函数或符号的声明. 比如void funB(); void funA(){funB();}void funB(){}funA要调用funB,你们在funA之前就必须先有funB的声明,有了这个funB的声明,无论funB的定义在哪,funA都能被编译通过了.只要链接时能在所有模块中找到这个funB,你们程序就能链接成功,执行了. 正因为这个关系,所以我们一般为一个CPP中的所有函数都写一个声明在对应的H文件中,这样,其他CPP只要包含了这个H文件,就有了这个CPP中所有函数或符号的声明,就可以使用这个CPP中实现的函数或定义的符号了.没有头文件,程序也是完全可以的,只是你每次调用其他CPP中的函数时,都得自己在CPP中再写一遍你要调用的函数的声明. 说的不够详细,不知道大家能否理解. 头文件就是一个代码文本,放一些声明,让其他源代码文件来包含的.因为会被多个CPP包含,所以当你把定义放到头文件中时,如果有两个或以上地方包含了这个头文件,那么这个定义就也会有多份(因为预处理指令#include 做的是完全的代码拷贝),就会出现重复定义的错误 提问者 的感言: 谢谢! 2009-02-13其他回答(8) 热心问友 2009-02-06.h里面主要放声明,因为其他.cpp可能要引用.h,.h文件由预编译器处理,正式编译器不处理这个文件,所以里面放实现代码会出错 比如你要编译一个程序 那么代码应该要写在.cpp的文件里,但是要用到一些数学函数之类的 那么 你就要加载一些文件,那些文件可以是 如 输入输出函数库文件 stdio.h过儿~~~6级2009-02-06头文件被包含在源文件里,要应用某个函数就要写上相应的头文件,而头文件是在源文件里的.当我们写好了一个源文件,如果愿文件有某种一般功能,我们可以保存起来,以后在写别的愿程序代码时通过些头文件,便可直接应用里面的函数了.28岁的梦7级2009-02-06你要知道头文件的用处:当你在程序调用当前没有申明的函数是,编译器会根据头文件去找那个函数。 言外之意头文件只是给编译器提供搜索函数的地方。所以不能编译和执行了。更多回答
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式