|
|
发表于 2006-11-16 15:54:00
|
显示全部楼层
Re: Re:程序面试试题(节选)
FlyMagic: Re:程序面试试题(节选)
Re:程序面试试题(节选)
#define 增加分配空间不是他本身的作用,比如说
#define xxx (300)
void main(void)
{
int x = xxx * xxx * xxx;
}
这种写法和
void main(void)
{
int x = 300 * 300 * 300;
}
这种写法是没有区别的。问题就在这里了,三个300虽然值是一样,但是存储的空间是不一样的,也就是说要3个单位的存储空间。#define 中使用的常量越多,空间就越多。因为每个都被替换成了数字,而每个数字要分配不同的存储空间。
而写成
const int xxx = 300;
void main(void)
{
int x = xxx * xxx * xxx;
}
这样的话,三个xxx都使用的同样一个存储空间,所以不管使用多少次,存储空间都不会增加。就是这个原因。
这俩程序生成的机器代码肯定完全一样
而且根本不存在"三个xxx"这种东西, xxx* xxx* xxx,在编译阶段就已经被
编译器计算出值,到时候就是一条简单的mov 指令而已
只要全局的,const也好,define也好,根本不会有什么储存空间之类的东西
另外,const可以修饰指针 ,define不行.const能干n多 define死活也干不了的事情
很显然的,define只对预编译器有效,对编译器无效
define和const根本就是不同处远远多于近似处
|
|