c语⾔的头号标志性⽂件——头⽂件
C语⾔的头⽂件是⼀个看似复杂,但是实际上是⾮常容易懂的⼀个部分。之所以⼤家对于⼀知半解,我觉得跟现在的各种c语⾔⼊门书籍都是只对C语⾔的语法进⾏详细的不能再详细的说明,但对于整个程序的⽂件组织构架却只字不提,了好⼏本⽐较著名的C语⾔著作,却没有⼀个把.h⽂件的⽤法写的⽐较透彻的。下⾯我就⽃胆提笔,来按照我对.h的认识思路,向⼤家介绍⼀下。
让我们的思绪乘着时间机器回到⼤学⼀年级。C原来⽼师正在讲台上讲着我们的第⼀个C语⾔程序: Hello world!
⽂件名First.c
main()
{
printf(“Hello world!”);
}
第1
看看上⾯的程序,没有.h⽂件。是的,就是没有,世界上的万物都是经历从没有到有的过程的,我们对.h的认识,我想也需要从这个步骤开始。这时确实不需要.h⽂件,因为这个程序太简单了,根本就不需要。那么如何才能需要呢?让我们把这个程序变得稍微复杂些,请看下⾯这个,
⽂件名First.c
printStr()
{
printf(“Hello world!”);
}
main()
{
printStr();
}
第2
还是没有,那就让我们把这个程序再稍微改动⼀下.
⽂件名First.c
main()
{
printStr();
}
printStr()
{
printf(“Hello world!”);
}
第3
等等,不就是改变了个顺序嘛,但结果确是⼗分不同的.让我们编译⼀下例程-2和例程-3,你会发现例程-3是编译不过的.这时需要我们来认识⼀下另⼀个中的概念:作⽤域.
我们在这⾥只讲述与.h⽂件相关的顶层作⽤域,顶层作⽤域就是从声明点延伸到源程序⽂本结束,就printStr()这个函数来说,他没有单独的声明,只有定义,那么就从他定义的⾏开始,到first.c⽂件结束,也就是说,在在例程-2的main()函数的引⽤点上,已经是他的作⽤域.例程-3的main()函数的引⽤点上,还不是他的作⽤域,所以会编译出错.这种情况怎么办呢?有两种⽅法,⼀个就是让我们回到例程-2,顺序对我们来说没什么,谁先谁后不⼀样呢,只要能编译通过,程序能运⾏,就让main()⽂件总是放到最后吧.那就让我们来看另⼀个例程,让我们看看这个⽅法是不是在任何时候都会起作⽤.
⽂件名First.c
play2()
c语言入门书籍排行榜{
……………….
play1();
………………..
}
play1(){
……………..
play2();
……………………
}
main()
{
play1();
}
第4
也许⼤部分都会看出来了,这就是经常⽤到的⼀种算法,函数嵌套,那么让我们看看, play1和play2这两个函数哪个放到前⾯呢?
这时就需要我们来使⽤第⼆种⽅法,使⽤声明.
⽂件名First.c
play1();
play2();
play2()
{
……………….
play1();
………………..
}
play1()
{
…………………….
play2();
……………………
}
main()
{
play1();
}
例程-4
经历了我的半天的唠叨,加上四个例程的说明,我们终于开始了⽤量变引起的质变,这篇⽂章的主题.h⽂件快要出现了。
⼀个⼤型的软件项⽬,可能有⼏千个,上万个play,⽽不只是play1,play2这么简单,这样就可能有N个类似play1(); play2();这样的声明,这个时候就需要我们想办法把这样的play1(); play2();也另⾏管理,⽽不是把他放在.c⽂件中,于是.h⽂件出现了.
⽂件名First.h
play1();
play2();
⽂件名First.C
#include“first.h”
play2()
{
……………….
play1();
………………..
}
play1();
{
……………………..
play2();
……………………
}
main()
{
play1();
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。