为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。
方式一:
- 代码形式
//注意标识名是自己起的,但这两个必须相同,一般用头文件名的大写
#ifndef __A_H__ //如果未定义__A_H__,执行以下内容
#define __A_H__ //定义__A_H__
... ... // 声明、定义语句
#endif //结束执行
- 优点
#ifndef的方式受C/C++语言标准支持,兼容性好。它不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件(或者代码片段)不会被不小心同时包含。 - 缺点
需要自己想一个标识名,可能会重复;编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,ifndef会使得编译时间相对较长编译时间长。
方式二:
- 代码形式
#pragma once
... ... // 声明、定义语句
- 优点
不必再费劲想个宏名了;大型项目的编译速度也因此提高了一些。 - 缺点
同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件。