您的位置:首页 > 其它

两种防止头文件二次编译的方法

2016-10-08 09:45 323 查看


(1) #ifndef       

 #ifndef是最早期使用的方法,是基于语言的宏定义名字不能冲突的前提下的。

优点:这种方法不仅能保证同一个头文件不会被包含两次,也可以保证内容完全相同的两个文件也只能被包含一次。

缺点:你的#ifndef 后面跟的宏名字和你程序中的其他宏名字发生了”撞车“,那么会出现严重后果

例子:

file1.h中

#define BOOK_H   //宏名

现在又有一个文件 book.h 里面使用了宏定义方式防止头文件二次编译

#ifndef BOOK_H

#define BOOK_H

//  codes

#endif

下面是你的主函数所在文件内容

#include"fil1.h"

#include"book.h"   //这两个都是你自己的头文件

#include<........>

..................

预编译阶段把file1文件展开,就得到了宏 BOOK_H,在处理book.h文件时就发现BOOK_H这个宏已经存在了,就不会包含book.h头文件了,这就是弊端所在了。


(2)#pragma once

缺点:(1)微软编译器独有,因为他不支持跨平台。如果你想写跨平台的代码,最好使用上一种。

          (2)假如你的某一个头文件有多份拷贝,这些文件虽然在逻辑上都是一样的,但在物理上他们却是不同的,所以当你把这些文件包含的时候,就会发现真的都包含进来了,然后就是编译错误了。

优点:当物理上的同一文件被嵌套包含的时候,使用第一种方法预处理会每一次打开该文件做判断的,但是第二种方法则不会,所以在此#pragma once 会更快些。

Link: 


两种防止头文件二次编译的方法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  头文件二次编译