C语言.h和.c的理解与探讨

本文探讨了C语言中头文件.h的作用和预处理机制,包括编译过程的预处理、语法分析、编译及链接阶段。作者通过实践理解了头文件声明与实现分离的目的,并分享了相关学习资源,强调理解编译原理对于提升编程能力的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为复试所以好好研究c语言,虽然考试内容也仅仅是表面的东西,很多东西设计不到,但我觉的很有必要了解,发现c语言的水也好深呀!所有的c语言课本基本都是着重的介绍语法,对一些东西敬而远之,闭口不谈,导致c语言成为一门仅仅的语法课程,具体实际操作项目太远太远了,寒假的这段时间,因为各种原因让我反思了自己的c语言,反思了学习的过程,才意识到自己也是大多数的问题。

-----------------------------------------------------

这篇文章源自于我在练习课本上例子的时候,我不想原本照抄,我想尽量的演练语法和知识,有一个想法是我写一个排序函数,在另一个程序文件里能不能#include来运用呢,因为对java很熟悉,对java的项目也很熟悉,意识到世间万物都是相通的,自然会觉的c语言肯定会有类似的形式,继而研究了头文件和include的机制,发现了一些文章帮助了自己理解。课本只是告诉你这是编译预处理,深一点的可能会告诉尼这是实现相关功能的代码,但内部是如何实现的怎么运行的我们都不知道,问题是理解这个问题对实际应用这门语言很重要呀!

--------------------------------------------

通过我这两天的学习找资料,算是弄得小明白了,我按我的理解简单说一下,如果理解的不对欢迎纠正。然后推荐几篇帮助理解的博客虽然里面我觉得有些的不大对的地方。

>>>首先要弄清楚C程序文件显示1、编译前的预处理。2、分析语法等错误。3、正式编译 。 4、链接!

在写程序的时候,一般都要加上#include<stdio.h>.....他就是属于1阶段,还包括#define。。。等宏定义都是一个字“换”!.h文件里面都是声明,告诉编译器我先声明函数,全局变量等,在某个文件里有这些东西的实现。就像我们自己在一个文件里面写一个函数要先声明一样,这里也是!只不过声明太多了,当然也是为了程序的拓展性和为了减少冗余代码(技术的发展几乎都是从这几个目的出发),就都放到一个文件里面了。出于传统习惯,我们统一为头文件。编译器读到这会将头文件的都复制过去,并不会检测你到底有没有实现!

>>>于是这样一步步的往下走,生成中间文件什么的,到了最后的连接阶段,他就需要真的把你用到的实现的函数找到并使用了,简单点的gcc A.c B.c -o A

就可以了。大型的项目就需要用makeFile指定要链接到一个哪一个。


>>>>以上就是全部的理解了,里面涉及到的头文件的写法,extern等关键字的用法,makef的写法,gcc的使用,还有编译链接的更具体的实现等就属于硬性的学习的东西了,那东西我可以学,你也可以学,是区分不出我们之间的差距的,而里不理解这个过程,明不明白里面的正确原理才是区分人才和蠢材的关键。是我的体会,也是老师给我的教育。该弄明白的一定要明白,但不到钻牛角尖。


------------------------------

http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html   (这里面写的大多数还挺好,中间有一点错误)

http://www.cnblogs.com/suiyu/archive/2013/05/04/3058903.html   (c语言具体的编译链接过程)


>>>小结:最近为了复试重新学习c语言但是不想简单的为了考试而复习,再说了语法也没什么好学的,所以就好好研究了一些东西,发现c语言真是好东西,边写边做笔记。还是比较喜欢手写笔记,除非没办法手写的会记录电子版。以后有机会尽量把我学习所有知识,不管是c语言的笔记陆续转为博客。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值