曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3593|回复: 0
打印 上一主题 下一主题

pragma once

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-8-23 13:10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pragma once 是一条预处理指令,它的作用是防止编译器在编译的过程中将它所在的头文件打开并嵌入到源代码中。通常,将在项目的多个文件中嵌入类的定义,因为每个引用特定类名的文件都需要访问类的定义。有些情况下,头文件本身可能包括嵌入其它头文件的 #include 指令,这将导致某个头文件的内容有可能在源代码中多次出现---编译过程中出现某个类的多次定义是不允许的,这种情况被标志为错误。在每个头文件的开头部分都放入 #pragma once 指令,可以确保不出现这种错误。

注意,#pragma once 是 Microsoft 特有的指令,在其它开发环境中可能不支持。如果你的代码需要考虑移植性,那么可以在头文件中使用下面指令形式以达到相同的效果:
[C++] 纯文本查看 复制代码
//一个头文件
#ifndef BOX_H
#define BOX_H
// 代码
#endif

上面的 ifndef , define , endif 是任何 ISO/ANSI C++ 编译器都支持的指令。只要没有定义符号 BOX_H ,编译器就会嵌入 #ifndef 指令后面一直到 #endif 指令之前的所有代码行。 #ifndef 后面那一行定义了符号 BOX_H ,从而确保了该头文件中的代码不能被第二次嵌入。因此,这种方法与在头文件中开始处放置 #pragma once 指令具有相同的效果。显然,#pragma once 指令会显得更加简单与简洁,因此在 Visual C++ 环境中开发的代码,最好使用该指令。有时候,#ifndef 和 #endif 组合也可以写成如下形式:
#if !defined BOX_H
#define BOX_H
// 代码
#endif
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-29 11:28 , Processed in 0.076001 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表