- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
头文件中一般放一些重复使用的代码,例如函数声明,变量声明,常数定义,宏的定义等等。当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制到#include处。为了避免因为重复引用而导致的编译错误,头文件常具有#ifndef?? LABEL#define?? LABEL?? //代码部分#endif的格式。其中,LABEL为一个唯一的标号,命名规则跟变量的命名规则一样。常根据它所在的头文件名来命名,例如,如果头文件的文件名叫做hardware.h,那么可以这样使用:#ifndef?? __HARDWARE_H__ #define?? __HARDWARE_H__ //代码部分#endif这样写的意思就是,如果没有定义__HARDWARE_H__,则定义__HARDWARE_H__,并编译下面的代码部分,直到遇到#endif。这样,当重复引用时,由于__HARDWARE_H__已经被定义,则下面的代码部分就不会被编译了,这样就避免了重复定义。另外一个地方就是使用include时,使用引号(“”)时,首先搜索工程文件所在目录,然后再搜索编译器头文件所在目录。而使用尖括号()时,刚好是相反的搜索顺序。? C语言头文件的使用让我们的思绪乘着时间机器回到大学一年级。C原来老师正在讲台上讲着我们的第一个C语言程序: Hello world!文件名 First.cmain(){???? printf(“Hello world!”);}例程-1看看上面的程序,没有.h文件。是的,就是没有,世界上的万物都是经历从没有到有的过程的,我们对.h的认识,我想也需要从这个步骤开始。这时确实不需要.h文件,因为这个程序太简单了,根本就不需要。那么如何才能需要呢?让我们把这个程序变得稍微复杂些,请看下面这个,文件名 First.cprintStr(){???? printf(“Hello world!”);}main(){printStr()}???? 例程-2还是没有, 那就让我们把这个程序再稍微改动一下.文件名 First.cmain(){printStr()}printStr(){???? printf(“Hello world!”);}???? 例程-3等等,不就是改变了个顺序嘛, 但结果确是十分不同的. 让我们编译一下例程-2和例程-3,你会发现例程-3是编译不过的.这时需要我们来认识一下另一个C语言中的概念:作用域.我们在这里只讲述与.h文件相关的顶层作用域, 顶层作用域就是从声明点延伸到源程序文本结束, 就printStr()这个函数来说,他没有单独的声明,只有定义,那么就从他定义的行开始,到first.c文件结束, 也就是说,在在例程-2的main()函数的引用点上,已经是他的作用域. 例程-3的main()函数的引用点上,还不是他的作用域,所以会编译出错. 这种情况怎么办呢? 有两种方法 ,一个就是让我们回到例程-2, 顺序对我们来说没什么, 谁先谁后不一样呢,只要能编译通过,程序能运行, 就让main()文件总是放到最后吧. 那就让我们来看另一个例程,让我们看看这个方法是不是在任何时候都会起作用.文件名 First.cplay2(){play1();}play1(){???? play2();}main(){play1();}例程-4也许大部分都会看出来了,这就是经常用到的一种算法, 函数嵌套, 那么让我们看看, play1和play2这两个函数哪个放到前面呢?这时就需要我们来使用第二种方法,使用声明.文件名 First.cplay1();play2();play2(){play1();}play1(){???? play2(););}main(){play1()}例程--4一个大型的软件项目,可能有几千个,上万个play, 而不只是play1,play2这么简单, 这样就可能有N个类似 play1(); play2(); 这样的声明, 这个时候就需要我们想办法把这样的play1(); play2(); 也另行管理, 而不是把他放在.c文件中, 于是.h文件出现了 。文件名 first.hplay1();play2();文件名 first.C#include “first.h”play2(){play1();}play1(){???? play2() ;}main(){play1() ;}例程-4上面是.h文件的最基本的功能, 那么.h文件还有什么别的功能呢?如在 second.c 中还有一个函数需要调用 first.c 文件中的play1函数, 如何实现呢? Sencond.h 文件play1();sencond.c文件***(){Play();}例程-5在sencond.h文件内声明play1函数,怎么能调用
您可能关注的文档
- chpt6Cognitivevariables程序.pptx
- CISCO模拟一看就会教程Cisco-Packet-Tracer程序.doc
- CISP0302信息安全风险管理_v3.0程序.pptx
- CISP培训02密码学基础程序.pptx
- cloudera5.4.1离线安装与配置程序.docx
- CISP培训网络安全程序.pptx
- CMOS全脱机车牌识别(控制机主板开闸)使用说明书20151012程序.doc
- CMOS全脱机车牌识别(控制机主板开闸)调试说明书20151119程序.doc
- CMOS全脱机车牌识别(控制机主板开闸)调试说明书20160201程序.doc
- CMOS全脱机车牌识别(控制机主板开闸)调试说明书程序.doc
文档评论(0)