美文网首页
2. 头文件中的#ifndef #define #endif的作

2. 头文件中的#ifndef #define #endif的作

作者: 海盗军长 | 来源:发表于2018-06-08 14:01 被阅读0次

    相信有不少人看到 #ifndef #define #endif 的代码时,都会感到陌生,下面我们以AFNworking头文件为例,来深入的解析一下这到底是个什么东西:

    AFNeworking.h

    ifndef/define/endif 到底是个什么东西?

    这是C++预编译头文件保护符,保证即使文件被多次包含,头文件也只定义一次。目的是防止头文件的重复包含和编译。

    通俗点来说,当编译器第一次编译头文件 AFNeworking.h 的时候,会定义 _AFNETWORKING_ ,然后如果还有文件引用了该头文件,但 _AFNETWORKING_ 已经被定义了,所以就不会再去编译你的头文件添加的内容。这就是条件编译。

    那么什么情况下文件会被多次包含呢?

    举个栗子🌰:

    在一个大的软件工程里面,可能会有多个文件同时包含 AFNetworking.h 头文件,假如 AFNetworing.h 头文件没有加上这段 #ifndef #define #endif 的代码 ,那么当这些文件编译链接成一个可执行文件时,就会出现大量重定义 _AFNETWORKING_ 的错误。而在 AFNetworking.h 头文件中使用 #ifndef #define #endif 就能避免头文件的重定义。 

    那么在我们的工程里面如何使用?

    例如要编写头文件 example.h

    在头文件开头写上两行:

    #ifndef _EXAMPLE_H_   //头文件开头写上这一行

                #define _EXAMPLE_H_  //这里取名称一般是文件名的大写

                import "xxx.h"    //导入相关的头文件,按具体需要

    #endif                         //头文件结尾写上一行

    *标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线。当然自由命名也是可以的,_AFNEWORKING_ 就将后面的_H省略了。

    这样一个工程文件里同时包含两个 example.h 时,就不会出现重定义的错误了。

    相关文章

      网友评论

          本文标题:2. 头文件中的#ifndef #define #endif的作

          本文链接:https://www.haomeiwen.com/subject/ktposftx.html