游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3043|回复: 2

[转载]谈一谈ifndef define endif与pragma once

[复制链接]

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20468
发表于 2003-12-21 21:03:00 | 显示全部楼层 |阅读模式
作者:mmosquito

在vc6的时代头文件一般使用ifndef define endif
在vc7的时代头文件一般成了pragma once
不知道有没有人深究其中的意义
为什么有这样的代码,是为了头文件不被重复引用,那样编译器抱错的,这两种方法都是同样的目的,有没有区别呢?
还是举例来说明,可能有好几个库,每个库内部可能都有public.h这个文件,如果使用
ifndef public_h
define public_h
...
endif
那么当一个文件同时引用两个这样的库时,后一个库里的文件就不被编译了,而pragma once可以保证文件只被编译一次
看起来pragma once比ifndef define endif要好,那么ifndef define endif
的地方都pragma once好了。今天碰到了又一个例子,比如你有一个zlib.h在几个库都用到,而为了方便,把zlib每个目录下copy了一分,因为这个文件不会作修改,已经很完整了,这个时候如果使用pragma once,就会重复定义,看来ifndef define endif还是又派上用场的地方。
所以对于公有或者接口的文件,使用ifndef define endif,对于内部的文件使用pragma once.

呵呵,你压根儿用不着是吧,当我没说过。

27

主题

169

帖子

169

积分

注册会员

Rank: 2

积分
169
发表于 2003-12-24 12:03:00 | 显示全部楼层

Re:[转载]谈一谈ifndef define endif与pragma once

顶,一下,我也遇见过这个问题

0

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2003-12-24 20:27:00 | 显示全部楼层

Re:[转载]谈一谈ifndef define endif与pragma once

只是好像 pragma once 只被WIN32平台下一某些编译器支持。
OpenWatcom和MSC。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-24 20:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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