傻大方


首页 > 学习 >

文件|头文件的作用与作用域的关系



按关键词阅读: 关系 文件 作用

1、C语言头文件的作用最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是比较模糊的,只是之前的使用大多比较简单,并没有牵涉到太复杂的工程,所以定义和声明还是比较简单而明了了的.但是最近的大工程让我在这方面吃到了一点点苦头,虽然看了别人的代码能够很快的改正,但是这些改正背后的原因却不知道.我想大多数喜欢C语言的程序员应该是和我一样的,总喜欢去追究程序问题背后的底层原因,而这也恰恰是我喜欢C语言的最根本的原因.今天看过janders老兄在csdn上的一篇文 。

2、章后,理解的确加深了很多,而且还学到一些以前不怎么知道的知识.现将文章转载过来,并对文章当中的一些拼写错误做了简单的纠正,同时对文字及布局做了少许修改.(如果想看原文的,请参考本文底部的链接.)C语言中的.h文件和我认识由来已久 , 其使用方法虽不十分复杂 , 但我却是经过了几个月的“不懂”时期 , 几年的“一知半解”时期才逐渐认识清楚他的本来面目 。
揪其原因 , 我的驽钝和好学而不求甚解固然是原因之一 , 但另外还有其他原因 。
原因一:对于较小的项目 , 其作用不易被充分开发 , 换句话说就是即使不知道他的详细使用方法 , 项目照样进行 , 程序在计算机上照样跑 。
原因二:现在的各种C语言书籍都是只对C语言的语法进行详细的不能再详细 。

3、的说明 , 但对于整个程序的文件组织构架却只字不提 , 找了好几本比较著名的C语言著作 , 却没有一个把.h文件的用法写的比较透彻的 。
下面我就斗胆提笔 , 来按照我对.h的认识思路 , 向大家介绍一下 。
让我们的思绪乘着时间机器回到大学一年级 。
C原来老师正在讲台上讲着我们的第一个C语言程序: Hello world!文件名 First.cmain()printf(“Hello world!”);
例程-1看看上面的程序 , 没有.h文件 。
是的 , 就是没有 , 世界上的万物都是经历从没有到有的过程的 , 我们对.h的认识 , 我想也需要从这个步骤开始 。
这时确实不需要.h文件 , 因为这个程序太简单了 , 根本就不需要 。
那么如何才能需要呢?让我们 。

4、把这个程序变得稍微复杂些 , 请看下面这个 , 文件名 First.cprintStr() printf(“Hello world!”);
main()printStr();
例程-2还是没有, 那就让我们把这个程序再稍微改动一下.文件名 First.cmain()printStr();
printStr() printf(“Hello world!”);
例程-3等等 , 不就是改变了个顺序嘛, 但结果确是十分不同的. 让我们编译一下例程-2和例程-3,你会发现例程-3是编译不过的.这时需要我们来认识一下另一个C语言中的概念:作用域. 我们在这里只讲述与.h文件相关的顶层作用域, 顶层作用域就是从声明点延伸到源 。

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

6、ay2();
main()play1();
例程-4也许大部分都会看出来了 , 这就是经常用到的一种算法, 函数嵌套, 那么让我们看看, play1和play2这两个函数哪个放到前面呢? 这时就需要我们来使用第二种方法,使用声明. 文件名 First.cplay1();
play2();
play2().play1();
.play1().play2();
main()play1();
例程-4经历了我的半天的唠叨, 加上四个例程的说明,我们终于开始了用量变引起的质变, 这篇文章的主题.h文件快要出现了 。
一个大型的软件项目,可能有几千个,上万个play, 而不只是play1,play2这么简单, 这样就可能有 。

7、N个类似 play1();
play2();
这样的声明, 这个时候就需要我们想办法把这样的play1();
play2();
也另行管理, 而不是把他放在.c文件中, 于是.h文件出现了.文件名 First.hplay1();
play2();
文件名 First.C#include “first.h”play2().play1();
.play1();
.play2();
main()play1();
例程-4各位有可能会说,这位janders大虾也太罗嗦了 , 上面这些我也知道, 你还讲了这么半天, 请原谅, 如果说上面的内容80%的人都知道的话,那么我保证,下面的内容,80%的人都不完全知道. 而且 。


稿源:(未知)

【傻大方】网址:/a/2021/0902/0024073978.html

标题:文件|头文件的作用与作用域的关系


上一篇:薪酬管理|大学考试试卷《薪酬管理》及参考答案

下一篇:风苑|风苑B区修改后质量评估报告