.c和.h文件的区别

一个简单的问题:.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文件里定义多次),都不会发生冲突的。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值