#ifndef出现在所有头文件中,似乎成了定式。他在头文件中的作用是防止头文件被include多次。
给个例子:
#ifndef HEADERFILE_H
#define HEADERFILE_H
// some declarations in
// the header file.
#endif
这里面#ifndef和#endif配套使用可以起到上诉的作用。
比如我们有 a.cpp b.h c.h d.h这四个文件。
a.cpp:
#include<iostream>
#include"b.h"
#include"c.h"
using namespace
int mian()
{
cout<<"Hello China"<<endl;
return 0;
}
b.h:
#ifndef b_H
#define b_H
#include"d.h"
'''
b的内容
'''
#endif
c.h:?
#ifndef c_H
#define c_H
#include"d.h"
'''
c的内容
'''
#endif
这里我们可以不用管d.h里面是什么内容,在编译器编译a.cpp时,先去编译b.h,而b.h里包含d.h,编译器再去编译d.h,至此b.h的内容解决完毕。编译器继续编译c.h,按逻辑继续编译d.h,但是已经编译过了,这时出现定义错误。#ifndef就是解决这个问题。
此外,#ifndef可以防止任何标识符(如类型、枚举、类和静态变量)的重新声明。它们还可以防止递归包含; 例如,“ file1.h”包含“ file2.h”,“ file2.h”包含“ file1.h”。
也就是说不管遇不遇得到这个问题,我们都需要在头文件中加入#ifndef,C++有好多这样的情况,如内联,你还能想到有哪些呢?
而#define下面定义该头文件内容。
参考:
What are #ifndef and #define used for in C++?
#ifndef用法_放下扳手&拿起键盘的博客-CSDN博客_ifndef的用法
|