C++——#ifndef和#ifdef宏定义的使用及作用介绍

建议结合以下博客理解

头文件重复引用 https://blog.csdn.net/shenlanzifa/article/details/21071443

 

#ifndef和#ifdef都是一种宏定义判断,作用是防止多重定义。

 

#ifndef是if not define的简写,#ifdef是if define的简写。

 

       使用格式如下:

 

        #ifdef  标识符                          #ifndef  标识符

 

        程序段1                                       程序段1

 

        #else                                         #else

 

        程序段2                                       程序段2

 

        #endif                                      #endif

 

       一般的使用场景如下:

 

       1)、头文件中使用,防止头文件被多重调用

 

       2)、作为测试使用,省去注释代码的麻烦

 

       3)、作为不同角色或者场景的判断使用

 

       接下来对以上三种场景作举例说明:

 

1、头文件中使用。标识符的定义格式其实没有规定,最好全部是大写,为了好区分,最好以头文件名命名,然后加上下划线_,便于区分。

 

A.h

 

 

#ifndef _A

#define _A

#include "B.h"

class A

{

public:

int a;

B* objectb;

public:

A();

int geta();

void handle();

void hello();

};

#endif _A

这样,即使其他几个头文件中包含A.h,但是就只处理一次,第二次处理时,_A这个宏已经存在,将不会在执行循环里的程序。很好的防止了重复声明。

2、做测试用

B.cpp

 

 

#include <iostream>

#include "A.h"

#define INIT_B

using namespace std;

B::B()

{

#ifdef INIT_B

this->b=200;

#endif

}

有时候当代码比较多的时候,要做测试,但是全部注释很麻烦,这时候使用#ifdef非常好用,如果我不想执行

this->b=200;这段程序,只需要将上面的#define INIT_B注释就可以了。

 

3、作为不同角色或者场景的判断使用

 

B.h

 

 

#include <iostream>

#include "A.h"

#define ADMIN

using namespace std;

B::B()

{

#ifdef ADMIN

this->b=200;

#else

this->b=25;

#endif

}

如果是ADMIN管理员和不是管理员,所执行的代码不同。其实这段代码也可以使用(#if #else #endif),但是#if后面跟的是条件语句。

总结:#ifdef和#ifndef挺重要的,在头文件中最好都使用,防止代码出错。

上一篇:stm32:#ifndef/#define/#endif使用


下一篇:C/C++头文件以及避免头文件包含造成的重定义方法