#define与const的差别  |
虽然他们在使用中感觉“差不多”,但是他们在实现上有什么区别?
请看下面的代码:
#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无法取代的。
|
阅读全文(11602) | 回复(3) | 编辑 | 精华 |
回复:#define与const的差别 |
xiaoyao(游客)发表评论于2011/8/8 11:44:34 | 我用openvxi实现键盘输入除了问题,能不能教我下如何修改openvxi实现键盘输入啊
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 |
回复:#define与const的差别 |
(游客)发表评论于2009/11/13 11:17:15 | cosnt对象默认为文件的局部变量,所以是可以在头文件中存在.
#ifndef
#define
的功能确实是const不能完成的
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 | » 1 »
|
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
Blog信息 |
blog名称: 日志总数:33 评论数量:61 留言数量:-8 访问次数:235266 建立时间:2006年4月27日 | |

|