C语言的头文件是c语言中非常重要的一部分。而大家对c语言的头文件也许了解并不深,甚至觉得不重要,我觉得跟现在的各种c语言入门书籍都是只对C语言的语法进行详细的不能再详细的说明,但对于整个程序的文件组织构架却只字不提,找了好几本比较著名的C语言著作,却没有一个把.h文件的用法写的比较透彻的。下面我就斗胆提笔,来按照我对.h的认识思路,向大家介绍一下。
让我们的思绪乘着时间机器回到大学一年级。原来老师正在讲台上讲着我们的第一个C语言程序:
Hello world!
文件名First.c
main()
{
printf(“Hello world!”);
}
第1
看看上面的程序,没有.h文件。是的,就是没有,世界上的万物都是经历从没有到有的过程的,我们对.h的认识,我想也需要从这个步骤开始。这时确实不需要.h文件,因为这个程序太简单了,根本就不需要。那么如何才能需要呢?让我们把这个程序变得稍微复杂些,请看下面这个,
文件名First.c
{
printf(“Hello world!”);
}
main()
{
printStr();
}
第2
还是没有,那就让我们把这个程序再稍微改动一下.
文件名
First.c
main()
{
printStr();
}
printStr()
{
printf(“Hello world!”);
}
第3
等等,不就是改变了个顺序嘛,但结果确是十分不同的.让我们编译一下下面的例题,你会发现3是编译不过的.这时需要我们来认识一下另一个C语言中的概念:作用域.
我们在这里只讲述与.h文件相关的顶层作用域,顶层作用域就是从声明点延伸到源程序文本结束,就printStr()这个函数来说,他没有单独的声明,只有定义,那么就从他定义的行开始,到first.c文件结束,也就是说,在在例二的main()函数的引用点上,已经是他的作用域.例三main()函数的引用点上,还不是他的作用域,所以会编译出错.这种情况怎么办呢?有两种方法,一个就是让我们回到例二,顺序对我们来说没什么,谁先谁后不一样呢,只要能编译通过,程序能运行,就让main()文件总是放到最后吧.那就让我们来看另一个例程,让我们看看这个方法是不是在任何时候都会起作用.
文件名First.c
play2()
{
……………….
play1();
………………..
}
play1()
{
……………..
play2();
……………………
}
main()
{
play1();
}
第4
也许大部分都会看出来了,这就是经常用到的一种算法,函数嵌套,那么让我们看看, play1和play2这两个函数哪个放到前面呢?
这时就需要我们来使用第二种方法,使用声明.
文件名First.c
play1();
play2();
play2()
{
……………….
play1();
………………..
}
play1()
{
…………………….
play2();
……………………
}
main()
{
play1();
}