在初学C和C++时,我经常在头文件中使用#ifndef,#define,#endif定义个宏名防止头文件被多次编译,但是最近是用MFC时或者较新版的VS自动生成的头文件中都会出现#pragma once这个命令。
pragma : 杂注,编译命令
#pragma once是#pragma编译命令的一种,作用是放在文件的开头,防止本文件被多次编译。
使用#ifndef、#define和#endif编译命令通过设定一个宏名也可以防止文件被多次编译,但是这两种方法各有优缺点。
#pragmaonce与编译器相关,通过编译器从“物理”判断文件是否是同一个。但是可能有某些编译器不支持这个编译命令。在旧版本的编译器上时没有这个编译命令,也就是说这个方法可能造成某些兼容性问题。而且如果某文件被拷贝多份,编译器可能仍然造成多次编译问题。
#ifnedf, #define,#endif编译命令就没有什么兼容性问题,它出现在#pragma once之前,所以旧版编译器都支持这种方法,更不用说现在的编译器。但是这种方法是通过宏名 来判断是否是同一文件,如果文件多了可能造成宏名重复而引发问题。