#ifndef #define #endif (条件编译)作用

说明:

#ifndef XXXX

#define XXXX

#endif

字面意思

1:#ifndef 如果没有定义后面的宏XXXX,执行2 。如果#ifndef 如果有定义后面的宏,执行3

2  #define 执行3

3 #endif

作用:

1:防止重复引用(重复引用会导致编译效率低)。

2:防止头文件内容被重复包含和编译。 头文件重复包含会增大程序大小,重复编译增加编译时间。

解释#ifndef起到的效果是防止一个源文件多次包含同一个头文件

示例 不用#ifndef #define #endif

a.h


#include"b.h"
#define A 1

b.h

#include "a.h"
#define B 2

main.cpp

#include<iostream>
#include"a.h"
#include"b.h"
int main()
{
    
    return 0;
}

编译运行 会报错

In file included from b.h:1:0,
                 from a.h:1,
                 from b.h:1,
                 ...... 
                 from b.h:1,
                 from a.h:1,
                 from main.cpp:2:
a.h:1:14: error: #include nested too deeply
 #include"b.h"
              ^
In file included from a.h:1:0,
                 from b.h:1,
                 from a.h:1,
                 .........
                 from b.h:1,
                 from a.h:1,
                 from b.h:1,
                 from main.cpp:3:
b.h:1:14: error: #include nested too deeply
 #include"a.h"

分析原因

main.cpp中包含了两个头文件a.h 和b.h

a.h中包含了头文件b.h

b.h中包含了头文件a.h

编译器预编译时候 就会形成一个死循环 a.h和b.h在一直循环引用 

造成nested too deeply(嵌套太深)

 示例 用#ifndef #define #endif

修改头文件

a.h

#ifndef __A_H_
#define __A_H_
#include"b.h"
#define A 2

#endif

b.h

#ifndef __B_H_
#define __B_H_
#include"a.h"
#define B 2
#endif

main.cpp

#include<iostream>
#include"a.h"
#include"b.h"
int main()
{
    
    return 0;
}

编译运行通过

原因分析

1 字面意思 #ifndef 如果没有定义后面的宏,执行2 。如果#ifndef 如果有定义后面的宏,执行3

2  #define 执行3

3 #endif

备注:#define 标识 应该是唯一的, 一般以头文件名字大写加上下划线和大写的H构成。

         一般头文件不要定义变量,只做声明(重复引用就会有重定义)

指令 #ifdef 和 #else #endif

#include<iostram>
#define TEST_CODE 
int main()
{
    int a 10;
#ifdef TEST_CODE 
    a =10;

#else
    a = 100;
#endif
    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值