|
|
|
|
 请问这几种定义常量的方式有什么优劣? - littletiger [ 2005-09-24 11:17 | 302 byte(s)]
 Re: 请问这几种定义常量的方式有什么优劣? - Atu [ 2005-09-26 08:37 | 472 byte(s)]
 Re: 请问这几种定义常量的方式有什么优劣? - littletiger [ 2005-09-26 16:23 | 599 byte(s)]
 Re: 请问这几种定义常量的方式有什么优劣? - Atu [ 2005-09-27 08:15 | 666 byte(s)]
 Re: 请问这几种定义常量的方式有什么优劣? - littletiger [ 2005-09-28 09:37 | 273 byte(s)]
 Re: 请问这几种定义常量的方式有什么优劣? - uniware [ 2005-09-27 23:10 | 159 byte(s)]
 Re: 请问这几种定义常量的方式有什么优劣? - z_york [ 2005-09-24 22:58 | 33 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]
|
|
[Original]
[Print]
[Top]
|
1. 尽量用const和inline类型而不是define——<<Effective C++>>条款一是这么说的,建议你去读读
必要的时候,你可能需要用enum来替代const定义——如果你使用了一种旧的编译器
2. 三种方式效率的差别应该仅仅存在于编译期;
在打开编译优化的情况下,相信现在的编译器都会把它们优化成常量的
3. 我不太清楚在嵌入式系统上是否有更多的差别,建议你可以写一些测试代码,并编译出汇编代码看看。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
多谢两位!
#define是会展开的,不知道展开后编译器是否会自动合并这些常量那?不好说吧。不过如果是数字,一般情况下好像不作为常量存储的,夹杂在指令中了。
enum只能是数字
如果要形成定义常量的习惯,如果下描述不知道合适不?
常量为整数的情况下
1、如果要定义类型性质相同的一批常量,可以用enum。
2、如果要定义单个常量,用#define
常量为字符串的情况下
1、比较短的情况下,用#define
2、比较长的情况下,用const
在此,我主要是想形成一个良好的定义常量的习惯,不想细追编译器的差别。
往各位不吝赐教!
|
|
|
----
ldd3
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
> #define是会展开的,不知道展开后编译器是否会自动合并这些常量那?不好说吧。
没什么不好说的,无论哪种定义方式,只要打开优化选项,编译器都会优化好它的
至于说定义变量的习惯,要根据多少长度来区别,我倒是头一回听说过。
多少算短,多少算长呢?
按照<<Effactive C++>>作者的观点,
能用const的时候就不用define,实在不行用enum替代const
我觉得他说的是道理的
#define定义的标记是全局的,而enum和const都是有作用范围的,
只从这一点来说,const和enum就有了足够的优越性了。
再次建议你去读读那篇文章,然后再来讨论这个问题
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
|
我一般用的是纯C的代码,所有#define还是成堆的出现。不过在定义一组相关的整数值时,还是用enum较多。和#define相比,enum在调试器中通常都是可以查看其值的,更为方便。
|
|
----
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
Atu兄,这么激动啊
可能我没有说清楚,我说的字符串长短主要想说短的很多时候需要和其它字符串常量连接在一块使用。
可以如下使用
#define name "littletiger"
char* str= name " is a boy.";
如果define换成const就不可以。
|
|
|
----
ldd3
|
|
[Original]
[Print]
[Top]
|
|
|