#pragram once与#ifndefine防止头文件重复编译的区别
#ifndefine...#define...#endif是C/C++语言的宏定义,通过宏定义可以避免头文件重复包含。
优点:与编译器无关,因此可以跨平台使用;
缺点:(1)对于每一个头文件都必须有独特的宏定义名称,一旦出现多个头文件宏定义相同,同时包含这这些个头文件时就会导致仅第一个头文件包含成功;如下列代码显示,Tesh.cpp中包含了File1.h与File2,h两个头文件,但是两个头文件在定义时宏定义都是FILE_H,故File1.h包含成功同时但File2.h包含失败。
(2)需要打开每个文头文件判断宏定义名称;
File1.h
#ifndef FILE_H
#define FILE_H
...\program codes
#endif
File2.h
#ifndef FILE_H
#define FILE_H
...//program codes
#endif
Test.h
#include "File1.h"
#include "File2.h"
...//program codes
#pragram once由编译器来避免头文件重复包含;
优点:该方式通过物理地址来判定同一文件,故不用打开每个头文件,相比#ifndef节省编译时间;
缺点:(1)与编译器有关,有的编译器不支持,不适合在跨平台的程序中使用;
(2)当同一文件有多个拷贝(则物理地址不同),同时包含这些头文件时编译器无法避免这种重复包含的情况;