just do it

与其苟延残喘,不如纵情燃烧

#pragma once与#ifndef

在C/C++中,在使用预编译指令#include的时候,为了防止重复引用造成二义性的两种方法。

#ifndef

它不光可以保证同一份文件不会被包含两次,也能够保证不同文件完全相同的内容不会被包含两次。但,同样的,如果自定义的宏名不小心“重名”了,两份不同的文件使用同一个宏名进行#ifndef,那么会导致编译器找不到声明的情况(被编译器判定为重定义而屏蔽了)。

此外,由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,#ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式(Visual Studio 2015新建头文件会自带#pragma once指令)。

#ifndef 
     
#define   

//code  

#endif  

#pragma once

一般来说由编译器提供,是一个非标准但被广泛支持的方式(有些编译器不支持)

好处:操作简单,效率高

缺点:没有#ifndef灵活,兼容(#ifndef不受编译器的限制)

posted @ 2019-05-31 15:38  elong1995  阅读(152)  评论(0编辑  收藏  举报