浅析头文件

在工程里面,很常见的就是一个个的头文件,下文将从为什么要编写头文件?头文件怎么编写?为什么这么编写?三个方面来叙述。

一、为什么要编写头文件?

1.如何调用其他文件的函数?

  一个工程肯定都是多文件编译的,那么如何在file1.c中调用file2.c的函数呢?很简单,只需要告诉file1.c你想调用的那个函数的声明就行了。PS:有兴趣的小伙伴可以测试一下,测试方法很简单,将两个c文件添加到一个工程下,然后在file2.c中写一个函数,在file1.c中声明并使用该函数。

2.#include 是干嘛的?

  #是预编译处理指令的标志,#include”inc1.h”的作用就是将inc1.h文件的内容复制到此处,替换#include”inc1.h”

3.头文件里面都有什么?

  随便打开一个头文件观察一下,全是其对应的c文件内部函数的声明。

  综上所述,就可以明白为什么要编写头文件了,就是为了更方便的调用其他文件中的函数。

二、头文件怎么编写?

头文件的一般写法:

#ifndef _XXX_H_

#define _XXX_H_

/*函数声明、宏定义,结构体、枚举类型的定义*/

#endif

三、为什么这么编写头文件?

1.#ifndef、#define、#endif是干嘛的?

  ifndef 就是 if not define(如果没有定义)的意思,可以理解为一个if语句判断条件就是后面的符号常量有没有被定义。

  define 定义一个符号常量

  endif 和上面的ifndef 相匹配,中间的内容就是if的内容

2.为什么要加上#ifndef、#define、#endif?

  为了防止在一个文件中被引用多次,引用多次会使编译效率降低,可以防止部分重复变量定义的情况。

3.为什么我加上了#ifndef、#define、#endif却还是会出现变量重复定义的错误?

很多人都会遇到这个问题,原因是在头文件中定义了全局变量,这样很可能会引起变量重复定义的情况。可能很多人会像我一样有疑问,明明已经加上#ifndef、#define、#endif了,按理说头文件只会被引用一次,怎么会出现变量重复定义呢?原因是这样:代码编译的时候,其中有两个步骤一个是编译(compile)还有一个就是链接(link)。多文件编译的时候各个文件之间是互不相关的,链接的时候把各个文件关联起来。假设有个这样的情况你在file1.c中引用了file2.h和file3.h,在file2.c中引用了file3.h,file3.h中定义了全局变量A,在编译阶段是没有语法错误的(编译器的编译信息中也能体现出来是在链接阶段出现的问题,注意看compile是没问题的,但是link的时候就出现了error),但是在链接阶段,file1.c中的A和file2.c中的A就出现了重复定义的问题,所以写头文件的时候要注意一点,千万别放进去全局变量。

  一点拙见,欢迎指正!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值