c头文件(.h)的作用

原创 2015年11月18日 21:44:58

C语言的著作中,至今还没发现把.h文件的用法写的透彻的。在实际应用中也只能依葫芦画瓢,只知其然不知其所以然,甚是郁闷!闲来无事,便将搜集网络的相关内容整理一下,以便加深自己的理解

理论概述:
.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。

1)h文件作用:

     1.方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明;

  2. 使函数的作用域从函数声明的位置开始,而不是函数定义的位置(实践总结)

  3 .提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h)


2)h文件里应该有什么:常量,结构,类型定义,函数,变量申明。

3)h文件不应该有什么:变量定义函数定义。

4)extern问题:
  1.对于变量需要extern

  2.对于函数不需要因为函数的缺省状态是extern.如果一个函数要改变为只在文件内可见,static

5)include包含问题:虽然申明和类型定义可以重复,不过推荐使用条件编译。
  #ifndef _FILENAME_H, 
  #define _FILENAME_H
  ……

  #endif

实践总结

先看最简单的程序:hello world

1 /*test1.c*/
2 main()
3 {
4   printf("Hello World!\n"); 
5 } 

注意,test1中并没有.h文件,编译可以顺利通过。把程序做下改动,下面这个:

1 /*test2.c*/
2 prtstr()
3 {
4   printf("Hello World!\n"); 
5 }
6 main()
7 {
8     prtstr(); 
9 }


test2.c中还是没有.h文件,编译仍可以顺利通过。再把程序改动下:

 1 /*test3.c*/
 2 main()
 3 {
 4   prtstr(); 
 5 }
 6 
 7 prtstr()
 8 {
 9   printf("Hello World!\n"); 
10 }

test3.c中仍然没有.h文件,编译失败_。难道函数的位置影响编译的过程?现在我们来熟悉一下C语言中的概念:作用域。

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

/*test4.c*/ 
 2 play2() 
 3 { 
 4      play1();   
 5 } 
 6    
 7 play1()
 8 {
 9       play2();         
10 } 
11    
12 main() 
13 { 
14      play1(); 
15 } 

这就是经常用到的一种算法函数嵌套。play1 play2 这两个函数哪个放到前面呢?这时就需要我们来使用第二种方法,使用声明.

1 /*test5.c*/ 
 2 play1(); 
 3 play2();
 4 
 5 play2() 
 6 { 
 7   play1(); 
 8 } 
 9   play1() 
10 { 
11   play2(); 
12 } 
13 main() 
14 { 
15   play1(); 
16 } 


一个大型的软件项目,可能有几千个,上万个 play, 而不只是 play1,play2这么简单这样就可能有 个类似 play1(); play2(); 这样的声明这个时候就需要我们想办法把这样的 play1(); play2(); 另行管理而不是把他放在.c文件中于是.h 文件出现了.


1 /*test.h */
 2 play1(); 
 3 play2(); 
 4 /* test6.C */
 5 #include “test.h” 
 6 play2() 
 7 { 
 8   play1(); 
 9 } 
10 play1(); 
11 { 
12   play2(); 
13 } 
14 main() 
15 { 
16   play1(); 
17 } 

上面是.h文件的最基本的功能。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言经典编程题--哥德巴赫猜想 、完数 、猜数字等

验证歌德巴赫猜想:任意一个不小于6的偶数都可以表示成两个素数的和。从键盘任意给一个符合条件的数,输出相应的两个素数。 素数:指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数 代...

linux C 学习 简单字符串逆序输出

看了下网上的字符串逆序输出,都相对复杂,下面给一个简单的字符串逆序输出小程序实现: #include #include #include int main() { int i; int...

c头文件(.h)的作用

C语言的著作中,至今还没发现把.h文件的用法写的透彻的。在实际应用中也只能依葫芦画瓢,只知其然不知其所以然,甚是郁闷!闲来无事,便将搜集网络的相关内容整理一下,以便加深自己的理解 理论概述: ...
  • fei0724
  • fei0724
  • 2013年03月06日 15:22
  • 470

C、c++ .h 头文件的作用

C语言头文件的作用 C语言头文件的作用   最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题. 学习C语言已经有好几年了,工作使用也近半年了...

C语言头文件#includeunistd.h的作用

  • 2012年09月25日 08:20
  • 24KB
  • 下载

visual c++ 中的stdafx.h头文件的作用

stdafx.h VC工程里面经常见到stdafx.h这个头文件,以前也没有特别注意,但是这个文件用不好经常会出错,所以就GOOGLE了一下,总算是弄清楚了。。。 stdafx的英文全称为...
  • fn0723
  • fn0723
  • 2016年03月14日 22:11
  • 145

(转)io.h头文件中函数作用

write()写文件函数 原形:int write(int handle,char *buf,unsigned len) 用法:write(文件句柄,缓冲区地址,缓冲区字节长度); 功能:将缓冲...
  • gxj1680
  • gxj1680
  • 2011年12月28日 10:03
  • 900

.h头文件中的ifndef/define/endif 的作用

13. .h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 14. #i nclude 与 #i nclude "file.h"的区别? 答...

stdafx.h头文件作用

Standard Application Fram Extend 没有函数库,只是定义了一些环境参数,使得编译出来的程序能在32位的操作系统环境下运行。   Windows和MFC的...
  • csdwb
  • csdwb
  • 2011年12月05日 13:05
  • 309

limits.h头文件的作用

limits.h专门用于检测整型数据数据类型的表达值范围。 /*** *limits.h - implementation dependent values * * Copyright (...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c头文件(.h)的作用
举报原因:
原因补充:

(最多只允许输入30个字)