URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 24 » 请问这几种定义常量的方式有什么优劣?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
请问这几种定义常量的方式有什么优劣?
 
 
 
 
 
 
 
Subject: 请问这几种定义常量的方式有什么优劣?
Author: littletiger    Posted: 2005-09-24 11:17    Length: 302 byte(s)
[Original] [Print] [Top]
1,用宏定义。 #define CONST_V 1
2,用enum定义。enum x {CONST_V =1, ....}; 多用于定义一批常量
3,用const定义。const int CONST_V=1;

我的感觉,应该都差不多。我想问的是,他们编译后,占用的二进制文件大小,运行占用的内存有什么区别吗?
我是做嵌入试系统的,谢谢!
----
ldd3
[Original] [Print] [Top]
Subject: Re: 请问这几种定义常量的方式有什么优劣?
Author: z_york    Posted: 2005-09-24 22:58    Length: 33 byte(s)
[Original] [Print] [Top]
试着回答一下:1和2不会占用内存,3会
----
I love David Beckham and Man.Utd. for ever.
[Original] [Print] [Top]
Subject: Re: 请问这几种定义常量的方式有什么优劣?
Author: Atu    Posted: 2005-09-26 08:37    Length: 472 byte(s)
[Original] [Print] [Top]

1. 尽量用const和inline类型而不是define——<<Effective C++>>条款一是这么说的,建议你去读读
必要的时候,你可能需要用enum来替代const定义——如果你使用了一种旧的编译器

2. 三种方式效率的差别应该仅仅存在于编译期;
在打开编译优化的情况下,相信现在的编译器都会把它们优化成常量的

3. 我不太清楚在嵌入式系统上是否有更多的差别,建议你可以写一些测试代码,并编译出汇编代码看看。
[Original] [Print] [Top]
Subject: Re: 请问这几种定义常量的方式有什么优劣?
Author: littletiger    Posted: 2005-09-26 16:23    Length: 599 byte(s)
[Original] [Print] [Top]
多谢两位!
#define是会展开的,不知道展开后编译器是否会自动合并这些常量那?不好说吧。不过如果是数字,一般情况下好像不作为常量存储的,夹杂在指令中了。
enum只能是数字
如果要形成定义常量的习惯,如果下描述不知道合适不?

常量为整数的情况下
1、如果要定义类型性质相同的一批常量,可以用enum。
2、如果要定义单个常量,用#define
常量为字符串的情况下
1、比较短的情况下,用#define
2、比较长的情况下,用const

在此,我主要是想形成一个良好的定义常量的习惯,不想细追编译器的差别。
往各位不吝赐教!
----
ldd3
[Original] [Print] [Top]
Subject: Re: 请问这几种定义常量的方式有什么优劣?
Author: Atu    Posted: 2005-09-27 08:15    Length: 666 byte(s)
[Original] [Print] [Top]
> #define是会展开的,不知道展开后编译器是否会自动合并这些常量那?不好说吧。
没什么不好说的,无论哪种定义方式,只要打开优化选项,编译器都会优化好它的

至于说定义变量的习惯,要根据多少长度来区别,我倒是头一回听说过。
多少算短,多少算长呢?

按照<<Effactive C++>>作者的观点,
能用const的时候就不用define,实在不行用enum替代const
我觉得他说的是道理的

#define定义的标记是全局的,而enum和const都是有作用范围的,
只从这一点来说,const和enum就有了足够的优越性了。

再次建议你去读读那篇文章,然后再来讨论这个问题
[Original] [Print] [Top]
Subject: Re: 请问这几种定义常量的方式有什么优劣?
Author: uniware    Posted: 2005-09-27 23:10    Length: 159 byte(s)
[Original] [Print] [Top]
我一般用的是纯C的代码,所有#define还是成堆的出现。不过在定义一组相关的整数值时,还是用enum较多。和#define相比,enum在调试器中通常都是可以查看其值的,更为方便。
----
[Original] [Print] [Top]
Subject: Re: 请问这几种定义常量的方式有什么优劣?
Author: littletiger    Posted: 2005-09-28 09:37    Length: 273 byte(s)
[Original] [Print] [Top]
Atu兄,这么激动啊
可能我没有说清楚,我说的字符串长短主要想说短的很多时候需要和其它字符串常量连接在一块使用。
可以如下使用
#define name "littletiger"
char* str= name " is a boy.";
如果define换成const就不可以。
----
ldd3
[Original] [Print] [Top]
« Previous thread
问一个有关形参和实参得问题
C/C++编程版
24
Next thread »
老问题了,线程中如何使用信号?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:35, cost 0.040292024612427 ms.