| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 731 人关注过本帖
标题:[求助]const与#define
只看楼主 加入收藏
zptk720
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-8-19
收藏
 问题点数:0 回复次数:5 
[求助]const与#define

使用关键字const而不是#define语句的好处有哪些??

搜索更多相关主题的帖子: const define 语句 关键 
2007-09-02 11:24
柳儿
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:1830
专家分:30
注 册:2004-9-23
收藏
得分:0 
使用#define的话,只是简单的文本替换。
感觉,const的话,常量至少还有数据类型。
编译的时候,编译器可以对const进行类型检查,但是对#define就无能为力了。
如果用#define引起错误,很难查出来的。

成功会使人骄傲。如果你骄傲自大,你就会停止学习。不学习,人就停止了进步
2007-09-02 12:23
duffebear
Rank: 1
等 级:新手上路
威 望:2
帖 子:172
专家分:0
注 册:2007-1-30
收藏
得分:0 


“尽量使用编译器而不用预处理”

#define ASPECT_RATIO 1.653

编译器会永远也看不到ASPECT_RATIO这个符号名,因为在源码进入编译器之前,它会被预处理程序去掉,于是ASPECT_RATIO不会加入到符号列表中。如果涉及到这个常量的代码在编译时报错,就会很令人费解,因为报错信息指的是1.653,而不是ASPECT_RATIO。如果ASPECT_RATIO不是在你自己写的头文件中定义的,你就会奇怪1.653是从哪里来的,甚至会花时间跟踪下去。这个问题也会出现在符号调试器中,因为同样地,你所写的符号名不会出现在符号列表中。
解决这个问题的方案很简单:不用预处理宏,定义一个常量:

const double ASPECT_RATIO = 1.653;



死后定当长眠 生前何须久睡
2007-09-02 13:16
wsy
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-9-2
收藏
得分:0 
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。

2007-09-03 22:54
绝种好小伙
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-9-3
收藏
得分:0 
说的不错,应该就是这个意思

Andy
2007-09-04 09:55
dart
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2007-9-2
收藏
得分:0 
呵呵,是个好主意........
2007-09-04 20:52
快速回复:[求助]const与#define
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030199 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved