您的位置:首页 > 其它

头文件保护符和#pragma once

2011-10-06 17:06 951 查看
 
会为了防止头文件被包含多次,都会在每个头文件中写与如下类似的代码:

// a.h

#ifndef A_H

#define A_H

//内容

#endif

这样,你如果在两个地方都有这个语句:

#include "a.h"

那么这个头文件将被保证只被加入一次,你知道为什么会只加入一次吗?因为A_H这个宏定义哈。

然后这样其实也可以的:

如:

//a.h

什么也不加..

调用时:

第一次调用

#ifndef A_H

#define A_H

#include "a.h"

#endif

第二次调用:

#ifndef A_H

#define A_H

#include "a.h"

#endif

前者叫内部保护,后者叫外部保护。

由于外部保护经常可能会忘记写,容易被误用,所以我们推荐使用内部保护。

微软提供了一个指令使你可以更方便的保护:

#pragma once//优点:方便,缺点:无可移植性

pragma once是告诉编译器在编译阶段只被编译器包含一次,是否有效与具体的编译有关,在跨平台时不应该使用。而头文件保护符是与语言相关的,推荐跨平台时使用。

#if !define ...

#define ...

#endif

编译器每次读到#if !define 时,如果已经定义过了则跳过,但还是要搜索整个文件,找到#endif 时退出,此时无疑增加了编译时间。而加上#pragma once一句,则可以让编译器立即退出,减少了编译的时间。

综上,一般用法为:

 

#if !defined ...

#define ...

#pragma once

...

#endif // !defined (...)

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