一个简单的问题:.c和.h文件的区别
学了几个月的C语言,反而觉得越来越不懂了。同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢?
2楼:
子程序不要定义在.h中。
函数定义要放在.c中,而.h只做声明.否则多引用几次,就会发生函数重复定义的错误。
3楼:
.h只做声明,编译后不产生代码
4楼:
这样做目的是为了实现软件的模块化
使软件结构清晰,而且也便于别人使用你写的程序
纯粹用 C 语言语法的角度,你当然可以在 .h 中放任何东西,因为 #include 完全等价 于把 .h 文件 Ctrl-C Ctrl-V 到 .c 中
.h 中应该都是一些宏定义和变量、函数声明,告诉别人你的程序“能干什么、该怎么用”
.c 中是所有变量和函数的定义,告诉计算机你的程序“该怎么实现”
5楼:
当然,如果一个 .h 被多个 .c 包含
而且 .h 中有对象(变量或函数)的定义,就会发生重复定义的错误了
声明可以无穷多次,定义只能一次
6楼:
一般来说,一个C文件应该是一个模块
如果你的程序仅仅有一个模块(仅仅一个C文件),就可以不用建立H文件了。
否则你的模块肯定不是独立的,你的模块里面的实现要被别的模块调用。这个时候你最好生成一个头文件(H文件),在头文件里面可以声明你的那些函数是公共的。当别的模块包含你的头文件后,就可以使用你的公共声明了。
7楼:
一个C对应一个H,这样管理起来方便
比如你有一个"feed_dog.c",那么就再添加一个"feed_dog.h":
#ifndef _feed_dog_h
#define _feed_dog_h
extern void feed_dog(void);
#endif
其实在H文件里写函数也无所谓,只是不符合习惯而已。只要按照以上的格式写,一个H文件添加多少次都无所谓,呵呵
8楼:
只是一种约定
在编译器里面,.c和.h是没有区别的,.c和.h如何使用完全取决于程序员,不过为了你的程序以后还能看懂而且别人也能看懂,请遵守普遍的约定,这些约定前面的大虾们已经讲了很多了.
这个就象汽车在马路上要靠右行使一样,是人为约定,汽车(编译器)本身并不知道自己是在靠左还是靠右行使.
如果你喜欢,还可以用任意后缀命名源文件和头文件,但这样干可能会导致集成编译和调试环境罢工,你只好自己写makefile文件了.
9楼:
非常感谢各位大侠,不过我现在越来越糊涂了
1, 当一个函数要经常使用(比如有十几个C文件使用它)时,一般我都放在H文件里,并在前面加上__inline.对于__inline函数,很多C文件都可 以INCLUDE这个H文件,但是它好象只能被一个H文件INCLUDE,如果有两个H文件INCLUDE它,就会出现编译错误。
2,有些数组变量,其大小可能达十几K,而且要赋初值,这就不放在C文件里了,要不人都蒙了。
3,
#ifndef _feed_dog_h
#define _feed_dog_h
extern void feed_dog(void);
#endif
mohanwei兄,是不是这样定议了,这个feed_dog.h就可以无数次的被INCLUDE了?
11楼:
#ifndef _feed_dog_h //如果到目前为止还没有定义过“_feed_dog_h”这个宏
#define _feed_dog_h //则定义“_feed_dog_h”这个宏
extern void feed_dog(void); //声明一个外部函数
#endif //“#ifndef”到此结束
所以,不管你定义多少次(哪怕你在同一个C文件里定义多次),都不会发生冲突的。