C语言中 .c和.h有什么区别

多文件的编辑。。比如:先建立一个main.c文件:
#include <stdio.h>
#include "fun.h"

int main(int argc, char *argv[])
{
printf("%d\n",fun(9,2));
system("PAUSE");
return 0;
}
再建一个fun.h:
int fun(int a, int b);
再建一个fun.c:
#include "fun.h"

int fun(int a,int b )
{
return a+b;
}
为什么必须先建一个fun.h再建一个fun.c而不直接把这两个写在一起当做fun.h呢?
那位大虾有空,解释一下下。。谢谢了

一、意思不同

.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。

.c文件一般放的是变量、数组、函数的具体定义。

二、用法不同

.c文件,以c为扩展名,一般存储具体功能的实现。

.h文件,称为头文件,一般存储类型的定义,函数的声明等。通常,头文件被.c文件包含,使用#include 语句。但值得注意的是,这只是一种约定,而非强制。

三、作用

如果在h文件中实现一个函数体,那么如果在多个C文件中引用它,而且又同时编译多个C文件,将其生成的目标文件连接成一个可执行文件,在每个引用此h 文件的C文件所生成的目标文件中,都有一份这个函数的代码,如果这段函数又没有定义成局部函数,那么在连接时,就会发现多个相同的函数,就会报错。

如果在h文件中定义全局变量,并且将此全局变量赋初值,那么在多个引用此h文件的C文件中同样存在相同变量名的拷贝,关键是此变量被赋了初值,所以编 译器就会将此变量放入DATA段,最终在连接阶段,会在DATA段中存在多个相同的变量,它无法将这些变量统一成一个变量,也就是仅为此变量分配一个空 间,而不是多份空间,假定这个变量在h文件没有赋初值,编译器就会将之放入BSS段,连接器会对BSS段的多个同名变量仅分配一个存储空间。

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-05-09

C语言的源文件分为两种:

1、.c文件,以c为扩展名,一般存储具体功能的实现;

2、.h文件,称为头文件,一般存储类型的定义,函数的声明等。

通常,头文件被.c文件包含,使用#include 语句。

但值得注意的是,这只是一种约定,而非强制。

事实上,将声明写在.c文件,比如a.c,然后

#include "a.c"

同样是合法的。 

而把.h文件,内部写入函数实现,再在.c文件中引用,也是编译器允许的。

所以,.c与.h的区分,本质上是一种约定。一名合格的软件开发人员,也要遵循这个约定,增加代码的可读性和维护性。

第2个回答  2009-04-27
头文件用於定义类型
c文件主要用於写实现.本回答被提问者采纳
相似回答