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挺重要的,在头文件中最好都使用,防止代码出错。
标签:头文件,ifdef,C++,endif,ifndef,include,define 来源: https://blog.csdn.net/m0_37965811/article/details/117604684