1. DEFINE是预处理指令,是简单的文字替换;而const是关键字,用于变量声明的修饰。
2. DEFINE替换的结果可以是数值、表达式、字符串、甚至是一个程序;而const只能限定变量为不可修改的常量,也就是说替换的结果只能是一个已经存在类型的值。
3. #define常量是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在;而const变量时在堆栈分配了空间,或者说,const的常量是一个Run-Time的概念,在程序中确确实实的存在可以被调用、传递。
4. #define常量存在于程序的代码段,而const常量存在于程序的数据段。

C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:
1. const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
2. 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试
但在C语言中使用define比较好,在c中,const的意思是“一个不能被改变的普通变量”。在c中,它总是占用内存,而且它的名字是全局符。c编辑器不能把const看成一个编译期间的常量。

宏的好处:
宏不仅可以用来代替常数值,还可以用来代替表达式,甚至是代码段。宏的功能很强大,但也容易出错,所以其利弊大小颇有争议。
    用宏来代表常数,好处是:
1. 让代码更简洁明了,依赖于为宏取一个适当的名字。一般来说,宏的名字更要注重有明确直观的意义,有时宁可让它长点。
2. 方便代码的维护

const与define的异同的更多相关文章

  1. const与#define的异同

    1  作为常量时的异同 (0)  相同 两者都可以用来定义常量: #define PI 3.14159 // 常量宏        const doulbe Pi=3.14159; // 常量 (1) ...

  2. 在php中定义常量时,const与define的区别?

    问]在php中定义常量时,const与define的区别?  [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很 ...

  3. 面试问题5:const 与 define 宏定义之间的区别

    问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同     define宏是在预处理阶段展开:     const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...

  4. 关于const和define的内存分配问题的总结

    关于const和define的内存分配问题 const与#define宏定义的区别----C语言深度剖析 1,  const定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静 ...

  5. iOS—— static和const联合使用;使用static const 与 #define

    static和const联合使用:   static将一个全局变量变成局部变量   const将一个局部变量变成局部常量 // 定义了一个局部常量      static const CGFloat ...

  6. 实例讲述PHP面向对象的特性;;;php中const与define的使用区别

    php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...

  7. const和#define常量的区别

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...

  8. 【编程基础】const与#define的区别

    [前言] 相信大家看别人代码的时候都遇到过,有人用#define定义,也有人用const定义. 那么两者的区别到底是什么呢?哪个更好用呢? 网上查了又查,下面总结一下. [总结] 编译器处理方式不同 ...

  9. 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等

    今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...

随机推荐

  1. django: db howto - 1

    以在 Django 中使用 MySQL 为例,首先要安装 MySQL 和 MySQL-python 组件,确保 python 能执行 import MySQLdb. MySQL 中创建数据库: [ro ...

  2. MySQL sql 执行步骤

    基本步骤是  1.from  2.join on  3.where  4.group by  5.having  6.order by  7.select  8.distinct ,sum,...  ...

  3. angular请求传递不了数据

    var data={ 'id':ztreeParent.id } $http({ url:'/rcCategoryControler/deleteRcCategoryById', method:'GE ...

  4. 翻译:《What can I hold you with?》—— 博尔赫斯《英文诗两首》之一。

    What can I hold you with? 我拿什么才能留住你? I offer you lean streets, desperate sunsets, the moon of the ja ...

  5. 第四届CCF大数据学术会议征文通知

    第四届CCF大数据学术会议征文通知 2016年10月,兰州 近几年,大数据是各界高度关注积极布局的热点方向.2015年8月,国务院发表<促进大数据发展行动纲要>,正式将大数据提升为国家战略 ...

  6. C程序设计语言练习题1-8

    练习1-8 编写一个统计空格.制表符与换行符个数的程序. 代码如下: #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它 ...

  7. 接私活,得有套好框架,.net快速开发神器

    同一家公司的同事,拿同样的工资,以前他在用肾机,我还在用诺记.吃饭的时候他是买单王,我在想这家伙应该没存什么钱吧.结果前段时间他买了个沃尔沃S60L,可我一套省城小三房的首付都还没凑齐. 他说他经常在 ...

  8. Json数据转换

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  9. Codeforces 543D Road Improvement

    http://codeforces.com/contest/543/problem/D 题意: 给定n个点的树 问: 一开始全是黑边,对于以i为根时,把树边白染色,使得任意点走到根的路径上不超过一条黑 ...

  10. LeetCode_Climbing Stairs

    ou are climbing a stair case. It takes n steps to reach to the top. or steps. In how many distinct w ...