#pragram与#ifndefine防止头文件重复编译的区别

#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)当同一文件有多个拷贝(则物理地址不同),同时包含这些头文件时编译器无法避免这种重复包含的情况;

posted on 2017-09-05 20:22  silentteen  阅读(768)  评论(0编辑  收藏  举报