在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性的两种方法。
它不光可以保证同一份文件不会被包含两次,也能够保证不同文件完全相同的内容不会被包含两次。但,同样的,如果自定义的宏名不小心“重名”了,两份不同的文件使用同一个宏名进行#ifndef,那么会导致编译器找不到声明的情况(被编译器判定为重定义而屏蔽了)。
此外,由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式(Visual Studio 2015新建头文件会自带#pragma once指令)。
#ifndef
#define
//code
#endif
一般来说由编译器提供,是一个非标准但被广泛支持的方式(有些编译器不支持)
好处:操作简单,效率高
缺点:没有#ifndef灵活,兼容(#ifndef不受编译器的限制)
原文:https://www.cnblogs.com/elong1995/p/10955524.html