const定义常量与宏定义的区别,详细一点的

 我来答
ren0065
推荐于2017-09-07 · TA获得超过640个赞
知道小有建树答主
回答量:526
采纳率:0%
帮助的人:393万
展开全部
#define与const的差别
文章收藏, 网上资源
zhu_ruixian 发表于 2007-3-27 14:32:23

虽然他们在使用中感觉“差不多”,但是他们在实现上有什么区别?

请看下面的代码:

#define T 13 /*用#define定义的一个常量T*/

int main()

{

const int t=13;/*用const定义的一个常量*/

int n=t;/*把t赋值给n*/

int m=T;/*把T赋值给m*/

}

1.差别:

const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在可以被调用、传递。而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。

const常量存在于程序的数据段.

#define常量存在于程序的代码段。

2优缺点:

至于两者的优缺点,要看具体的情况了。一般的常数应用,我个人认为#define是一个更好的选择:

i.从run-time的角度来看,他在空间上和时间上都有很好优势。

ii.从compile-time的角度来看,类似m=t*10的代码不会被编译器优化,t*10的操作需要在run-time执行。而#define的常量会被合并。

但是:如果你需要粗鲁的修改常数的值,那就的使用const了,因为后者在程序中没有实际的存在.

另外在头文件中使用 #define 可以避免头文件重复包含的问题,这个功能,是const无法取代的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式