游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4464|回复: 10

请问为什么从VC++的版本从6代到7代以后,#if!defined... #defin

[复制链接]

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
发表于 2006-4-12 09:20:00 | 显示全部楼层 |阅读模式
如果在VC6中用类向导生成了一个CFile类,那File.h文件的开头必然被系统自动加上下面的语句:


#if !defined (AFX_FILE_H__CB89A9BC_7CA6_43EE_945D_50D3FCB31E4F__INCLUDED_)

#define AFX_FILE_H__CB89A9BC_7CA6_43EE_945D_50D3FCB31E4F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


可是到了VC7里面生成同样的类,系统就只在头文件的上方加入一行:

#pragma once

-------------------------------------
#if !defined
#define
上面两条语句是防止文件被重复包含的吧,怎么到了VC7中就不需要了?

还有这三条语句是干什么用的,我一直都没弄明白???

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000










2

主题

13

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2006-4-12 12:52:00 | 显示全部楼层 |阅读模式
貌似VC6里面的这些乱其八糟的东西也是为了防止头文件重复包含的,后来的版本里只用#pragma once 就可以达到同样的效果了。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-4-12 16:16:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de

VC6里也有啊

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

_MSC_VER是版本号的宏

我不大用#pragma once

14

主题

45

帖子

45

积分

注册会员

Rank: 2

积分
45
 楼主| 发表于 2006-4-12 16:58:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de


那为什么Vc  6中要用这样的形式

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


而VC 7中只需要用

#pragma onece 一条指令就够了?

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-4-12 20:18:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de

兼容性问题?

37

主题

180

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2006-4-12 22:13:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de

其实 只用一种就可以了...

为了是不要重复宣告

0

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2006-4-13 09:01:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de

我猜_MSC_VER可能是编译器的版本,vc7的_MSC_VER>1000,所以如果代码只考虑在vc7下编译的话这个条件就可以不用写了。

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2006-4-13 09:08:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de

vc6就可以pragma once了。
vc6的msc_ver是1200,vc7是1300,vc7.1是1310,vc8是1400,好像是这样的。

14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2006-4-13 10:50:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de

#pragma once
最好还是别用了,别的编译器不一定支持的.
老老实实的用
#ifndef
#define
#endif

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2006-4-13 12:11:00 | 显示全部楼层

Re:请问为什么从VC++的版本从6代到7代以后,#if!defined... #de

gcc(2.95和以后)也支持的,只不过gcc会出一条警告
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 05:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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