社区
C语言
帖子详情
初学菜鸟提问:.h文件和.c文件之间有哪些联系,哪些是必要的联系?
cnsuyong
2003-04-26 12:48:18
越详细越好。
...全文
250
24
打赏
收藏
初学菜鸟提问:.h文件和.c文件之间有哪些联系,哪些是必要的联系?
越详细越好。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cnsuyong
2003-05-04
打赏
举报
回复
谢谢诸位,特别是“大骗子”。
maurice1983
2003-05-01
打赏
举报
回复
其实,我觉得.c和.h文件没什么区别,这只是个习惯!
mercury1231
2003-05-01
打赏
举报
回复
借楼主宝地一问,
为什么只#include 一个头文件,就能使用 在c文件里边才具体代码实现了的功能 呢?
99
2003-05-01
打赏
举报
回复
其实都差不多
本无差别的,只是编译器的默认问题
maenxiang
2003-05-01
打赏
举报
回复
将程序分成.h和.c可以有效地避免一些出乎意料为定义或重定的错误(自己认为是定了或没重定义)
我们可以将整个C/C++编译系统处理简单地分为两步:编译、连接
一、编译:
编译.c(.cpp)后生成文件目标,后缀为.o或.obj
在编译.c(.cpp)时单个文件编译的,每个#include语句都会相当于将所引用的文件的代码原封不动的扩展到到#include的位置上来,如:
test.h:
#ifndef _TEST_H_
#define _TEST_H_
int testvar;
void testfunc();
#endif
test.c;
#include "test.h"
#include <stdlib.h>
#include <stdio.h>
void testfunc()
{
puts("test.c");
printf("testvar is %d\n",testvar);
}
此时的test.c就相当于
test.c;
//#include "test.h"
#ifndef _TEST_H_
#define _TEST_H_
int testvar;
void testfunc();
#endif
#include <stdlib.h>
#include <stdio.h>
void testfunc()
{
puts("test.c");
printf("testvar is %d\n",testvar);
}
此时编译test.c就没问题了,不会有为定义之类的错误。
此时生成的test.o文件中就含有了变量testvar和testfunc的具体实现
二、连接:
将.o文件连接成可执行文件
如以上程序还有文件
main.c:
#include <stdlib.h>
#include <stdio.h>
//#include "test.h"
int main(int argc char * * argv)
{
testvar=16;
testfunc();
return 0;
}
显然编译的时候没有发现testvar和testfunc的声明。
需要增加#include "test.h"语句才好使。
编译后生成main.o文件,里面有testvar和testfunc的声明及main的实现部分。
将test.o和main.o连接生成可执行文件。就ok了
如果不是用#include "test.h"而是用#include "test.c"
编译的时候是好使,整个main.c就相当于
#include <stdlib.h>
#include <stdio.h>
#ifndef _TEST_H_
#define _TEST_H_
int testvar;
void testfunc();
#endif
#include <stdlib.h>
#include <stdio.h>
void testfunc()
{
puts("test.c");
printf("testvar is %d\n",testvar);
}
int main(int argc char * * argv)
{
testvar=16;
testfunc();
return 0;
}
编译完了之后生成的main.o文件就含有testvar的声明和testfunc、main的实现部分。是一个比较完整的,可以直接和相关的库连接生成可执行文件。
如果此时再将test.o和main.o连接,则两个.o中都有testfunc的实现部分,造成重定义
大家已经约定好了.h中放声明部分,.c放实现部分。所以一般的C/C++编译系统都不直接编译.h文件,而将所有的.c编译成.o(或.obj等)目标文件,再将所有的目标文件连接成可执行文件。
cnsuyong
2003-05-01
打赏
举报
回复
“五一”假期结束就结贴,欢迎大家继续各抒己见,楼上各位已经让俺有所领悟了,先行谢过。
aiyinsitan
2003-05-01
打赏
举报
回复
根据习惯, .h中一般放一些声明, 内联函数定义
总之, .h中的内容将不会被直接编译.
.c则是.h中声明的定义, 也就是实现文件.
不过只要你喜欢, 你可以不管这些"习惯"
cnsuyong
2003-04-30
打赏
举报
回复
书上讲的都很含糊,只说是头文件,用来向调用者提供各种声明而不提供函数实现等。但书上又说也可以直接#include "somefile.c"来实现代码共享,如此看来,.h文件在某些场合下岂不多余?比如所有调用者和被调用者的所有源代码都是俺自己编写时。
请得道者指点迷津。
mlsmls0129
2003-04-28
打赏
举报
回复
我也是刚学啊,
可以查一下书啊
yxc2008
2003-04-28
打赏
举报
回复
up
hehe214
2003-04-28
打赏
举报
回复
studying...
cnsuyong
2003-04-28
打赏
举报
回复
再等等...
cnsuyong
2003-04-26
打赏
举报
回复
看来.h唯一有意义的地方就在于发布函数库时不必发布源代码,可以这样理解吗?
jomly
2003-04-26
打赏
举报
回复
*.h是程序的头文件,里面放类型声明、函数声明、宏定义等。
*.c放你的函数代码.
maenxiang
2003-04-26
打赏
举报
回复
理论上两者没有区别,既然要分开,那么就是一些认为的约定了。要遵照这个约定。否则写得程序别人看不懂。你非把申明写到.c里。实现写到.h也未尝不可,不过大多编译器都是将你的所有的.c编译成.obj(或.o等)文件。你说你要将某些.h编译成目标文件,也是可以的,你要改他给你自动生成的make文件,不是找别扭。
zhaoao
2003-04-26
打赏
举报
回复
.h文件一般是函数的申明或者全局变量的声明,如果其他.c文件也都用到相同的头文件,
也可以在这里include进来
.c一般是函数的具体定义,就是函数的实现部分
hongyanzaiyun
2003-04-26
打赏
举报
回复
.h是一般作为头文件,你可以用来放一些类型声明,函数声明,常量定义,宏定义等等,发布产品的时候一般也把它给用户看
而.c则一般放你的函数代码,为了保持版权,你就可以把它留着不发布出去
ghtsao
2003-04-26
打赏
举报
回复
什么文件都无所谓,把两个合在一起也可以用。
zzgcxy
2003-04-26
打赏
举报
回复
.h就是一般的函数文件,里面放的就是常用到的函数,你也可以自己建立自己的.h文件,把自己编的常用的函数放在里面,以后就不用重复的编了。
.c是一般的c语言文件,是c语言编译时的文件,是不能少的。
guenxu
2003-04-26
打赏
举报
回复
.h文件是头文件,主要用于类的定义,包括成员变量和成员函数,为外界提供接口。还有宏义 和全局变量的定义。
.cpp文件是实现部分,通过具体的代码来完成.h文件声明的函数的功能。
加载更多回复(4)
arm学习笔记
打今天起
菜鸟
的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。 为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所以叫笔记而不是文章,是因为它们完全是本人个人学习经验的总结,而这些经验都来自于...
C语言编程实践:100个实用示例大全
压缩包内
文件
包含了详细说明文档、使用指南和安全警告,支持学习者通过实践深化理解C语言,并掌握解决问题的能力。 1. C语言基础语法实例 1.1 C语言概述 C语言是一种广泛使用的计算机编程语言,它...
java学习路线
知识 基本概念 MySQL 搭建 SQL 语句编写 约束 索引 事务 锁机制 设计数据库表 性能优化 学习建议 其中,SQL 语句编写 和 设计数据库表 这两个能力一定要有! 比如让你做一个学生管理系统,你要能想到需要哪些表,...
汇编语言入门教程
1 本讲座以汇编
初学
者或对汇编一点也不了解的读者为对象,汇编高手不属于该范围,但强烈建议高手指导并增补、修改本文。 2 任何读者可以跟此贴,提出疑问,或解答其中的问题,但对于所有跟贴,水贴、内容有错、毫...
C语言/C++
初学
问题
编程及C/C++
初学
者 FAQ 本文原为本人在论坛所发若干帖,意在集中解决新手学习C/C++语言时将遭遇到的各类问题,网友反馈情况良好,集合修订后作为个人作品贴于此处。 本贴主要分析概念原理和解决方案,不讨论具体...
C语言
70,024
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章