c语言的头号标志性文件——头文件

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是编译不过的.这时需要我们来认识一下另一个C语言中的概念:作用域.

我们在这里只讲述与.h文件相关的顶层作用域,顶层作用域就是从声明点延伸到源程序文本结束,printStr()这个函数来说,他没有单独的声明,只有定义,那么就从他定义的行开始,first.c文件结束,也就是说,在在例程-2main()函数的引用点上,已经是他的作用域.例程-3main()函数的引用点上,还不是他的作用域,所以会编译出错.这种情况怎么办呢?有两种方法,一个就是让我们回到例程-2,顺序对我们来说没什么,谁先谁后不一样呢,只要能编译通过,程序能运行,就让main()文件总是放到最后吧.那就让我们来看另一个例程,让我们看看这个方法是不是在任何时候都会起作用.

文件名First.c
   play2()
   {

 ……………….

 play1();

 ………………..

 
   }
   play1(){
   ……………..

 play2();      
   ……………………
   }

main()

{

play1();

}

4

也许大部分都会看出来了,这就是经常用到的一种算法,函数嵌套,那么让我们看看, play1play2这两个函数哪个放到前面呢?

这时就需要我们来使用第二种方法,使用声明.

文件名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();

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值