为了避免头文件的重复引用,C++有两种头文件保护机制
一、#ifndef与#endif
下面以example.h为例
格式:
#ifndef example_h
#define example_h
...
头文件内容
...
#endif
由于C++编译器对头文件是以预处理的方式进行的,那么编译器首次遇到这块代码时会首先发现 A 尚未被定义,于是继续执行到#endif结束。在这个过程中,第二行的#define A就会被定义,并且存到编译表内。
当编译器预处理其他包含example.h头文件时,也就是以下代码时
#include "example.h"
就会再次跳到example.h进行处理,但是发现example_h宏变量已经被定义,因此到#endif的代码就不会二次处理了。
二、
#pragma once
在头文件的最开始加入这条指令就能够保证头文件只被编译一次
#pragma once用来防止某个头文件被多次include,#ifndef,#define,#endif用来防止某个宏被多次定义。
#pragma once是编译相关,就是说这个编译系统上能用,但在其他编译系统不一定可以,也就是说移植性差,不过现在基本上已经是每个编译器都有这个定义了。
#ifndef,#define,#endif这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式
文章参考引用自