C-头文件.h的作用
来源:互联网 发布:淘宝生意参谋多少钱 编辑:程序博客网 时间:2024/05/29 04:20
收到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
/* test1.c */ main() { printf("Hello World!\n"); }
注意,test1中并没有.h文件,编译可以顺利通过。把程序做下改动,下面这个:
/* test2.c */ prtstr() { printf("Hello World!\n"); } main() { prtstr(); }
test2.c中还是没有.h文件,编译仍可以顺利通过。再把程序改动下:
/* test3.c */ main() { prtstr(); } prtstr() { printf("Hello World!\n"); }
test3.c中仍然没有.h文件,编译失败→_→。难道函数的位置影响编译的过程?现在我们来熟悉一下C语言中的概念:作用域。
我们在这里只讲述与.h文件相关的顶层作用域, 顶层作用域就是从声明点延伸到源程序文本结束, 就prtstr()这个函数来说,他没有单独的声明,只有定义,那么就从他定义的行开始,到文件结束, 也就是说,在test2.c的main()函数的引用点上,已经是他的作用域。 test3.c的main()函数的引用点上,还不是他的作用域,所以会编译出错. 这种情况怎么办呢? 有两种方法 ,一个就是让我们回到test2.c, 顺序对我们来说没什么, 谁先谁后不一样呢,只要能编译通过,程序能运行, 就让main()文件总是放到最后吧。那就让我们来看另一个例程,让我们看看这个方法是不是在任何时候都会起作用.
/* test4.c */ play2() { play1(); } play1() { play2(); } main() { play1(); }
这就是经常用到的一种算法, 函数嵌套。play1 和play2 这两个函数哪个放到前面呢?这时就需要我们来使用第二种方法,使用声明.
/* test5.c */ play1(); play2(); play2() { play1(); } play1() { play2(); } main() { play1(); }
一个大型的软件项目,可能有几千个,上万个 play, 而不只是 play1,play2这么简单, 这样就可能有 N 个类似 play1(); play2(); 这样的声明, 这个时候就需要我们想办法把这样的 play1(); play2(); 另行管理, 而不是把他放在.c文件中, 于是.h 文件出现了.
/* test.h */ play1(); play2(); /* test6.c */ #include “test.h” play2() { play1(); } play1(); { play2(); } main() { play1(); }
上面是.h文件的最基本的功能。
- c头文件(.h)的作用
- c头文件(.h)的作用
- C、c++ .h 头文件的作用
- c头文件(.h)的作用
- c头文件(.h)的作用
- C-头文件.h的作用
- .h头文件的作用
- C语言头文件#include<sys/types.h>的作用
- C语言头文件#include<unistd.h>的作用是什么?
- stdafx.h头文件的作用
- stdafx.h头文件的作用
- stdafx.h头文件的作用
- stdafx.h头文件的作用
- limits.h头文件的作用
- #include <afx.h>头文件的作用
- stdafx.h头文件作用
- c语言:常用各种头文件的作用,如:#include <stdlib.h>
- C中.h头文件的写法
- 织梦dedecms在导入数据库时提示错误dede_purview解决办法
- centos7部署zabbix2.4.8
- scala和maven整合
- Ubuntu centos系统——apache如何解决跨域资源访问
- Windows 操作系统wim镜像的 拆分与合成
- C-头文件.h的作用
- Unity中预览lua脚本
- Java8 lambda表达式10个示例
- Oracle存储过程调试方法
- Netty4概念篇:Netty架构设计
- css3 的各种渐变总结
- HBase RowKey的设计原则
- angular-cli启动代理
- linux 去除icmp重定向