#pragma once和#ifndef有什么区别?

elemusic 2011-09-29 01:17:28
平时看的都是#ifndef xxx,#define xxx,#endif
今天看到还有人用#pragma once,看起来好像是想实现相同的功能。

请问两者有什么区别么?哪个更好?感觉如果功能相同的话#pragma once写着比较方便、简洁。
...全文
182 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
elemusic 2011-09-29
  • 打赏
  • 举报
回复
原来如此,这么说的话如果只考虑MS平台还是用#pragma once好了。

不错,学到了。以后就用他。
星羽 2011-09-29
  • 打赏
  • 举报
回复
转:

三.#pragma once 与 #ifndef #define #endif

(1)从定义上即可看出,pragmas指令是某种机器或者操作系统独有的,并且不同编译器也常常有别。#pragma once这个是编译器相关指令,就是说在这个编译系统

上能用,但是在其他编译系统 不一定型,也就是说移植型差。不过现在基本上

已经是每个编译器都有这个定义了。

#ifndef #define #endif这个是语言支持指令,这是C/C++语言中的宏定义,通过

宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的。如果写的程序要 跨平台,最好使用这种方式。

(2)#ifndef #define #endif #ifndef 还有其它作用,防止头文件重复引用只是

其中一个应用而已。#pragma只有微软支持。

(3)#ifndef #define #endif 他读到#ifndef之后,如果已经定义过了,就会跳过

这一大片,一直到#endif为止。这将增加build时间,因为每次compiler都会打开这个文件,然后搜索全文件一遍。而如果碰到了#pragma once,他就会立刻停止
fox000002 2011-09-29
  • 打赏
  • 举报
回复
可惜 #pragma once 是 MSC specific

不可移植,换个编译器还得修改一遍代码

pathuang68 2011-09-29
  • 打赏
  • 举报
回复
他们可以实现类似的功能,但#ifndef xxx,#define xxx,#endif要灵活一些。

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧