学习笔记!参考链接

一、类型和安全检查不同

宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;

const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查

二、编译器处理不同

宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期;

const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据

三、存储方式不同

宏定义是直接替换,不会分配内存,存储与程序的代码段中;

const常量需要进行内存分配,存储与程序的数据段中

四、定义域不同
void f1 ()
{#define N 12const int n 12;
}
void f2 ()
{cout<<N <<endl; //正确,N已经定义过,不受定义域限制cout<<n <<endl; //错误,n定义域只在f1函数中
}

五、定义后能否取消

宏定义可以通过#undef来使之前的宏定义失效

const常量定义后将在定义域内永久有效

void f1()
{#define N 12const int n = 12;#undef N //取消宏定义后,即使在f1函数中,N也无效了#define N 21//取消后可以重新定义
}

六、是否可以做函数参数

宏定义不能作为参数传递给函数

const常量可以在函数的参数列表中出现

宏定义 #define 和常量 const 的区别相关推荐

  1. iOS 宏(define)与常量(const)的正确使用

    2019独角兽企业重金招聘Python工程师标准>>> 在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 ...

  2. 宏定义Define的一些用法

    ---转载百度文库 一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处 ...

  3. [C语言]宏定义#define的使用详解

    一.宏定义定义常量 预定义符号 FILE //进行编译的源文件 LINE //文件当前的行号 DATE //文件被编译的日期 TIME //文件被编译的时间 STDC //如果编译器遵循ANSI C, ...

  4. C语言 | 预处理 | 宏定义 | #define | 定义函数

    文章目录 预处理 预处理运算符 宏定义 无参宏定义 带参宏定义 宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如 ...

  5. 宏定义#define整理

    一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...

  6. 枚举(enum)、宏定义(#define)、结构体(struct)的拾遗

    1.宏定义 1.1.不带参数的宏定义 #define 标识符 字符串           例如:#define PI 3.1415926 说明: (1)宏名一般习惯用大写字母表示,但并非规定,也可以用 ...

  7. [C++]宏定义#define A B C

    C++关于宏定义的用法,有形如#define A B C的格式,此时B和C都是已知的字符串常量. 在宏定义中. 可以把两个常量字符串连在一起 如果#define A "a" 那么宏 ...

  8. VS无法使用宏定义#define解决方案

    在使用VS编译C语言或者其他语音用到宏定义#define,VS会报错提示(以VS2019为例) 解决方式: 在工具-->选项-->文本编辑器-->C/C++-->查看中,将&q ...

  9. 预处理命令 宏定义 #define #undef

    预处理命令 源程序中以#开头的行称为预处理指令. 预处理指令并不是C语言的语法成分,而是传给编译程序的指令. 包括: 宏定义 #define #undef 文件包含 #include 条件编译 #if ...

最新文章

  1. 多布局怎么搭建_小展位大吸引力,如何设计搭建出精致的展台?
  2. C++中的Dll内存问题
  3. android应用开发(16)---AndroidManifest.xml
  4. Android之深入WebView
  5. 【MySQL】MySQL常见的读写分离方法
  6. python 近期用到的基础知识汇总(主要是numpy和pytorch的相关矩阵变化函数)(一)
  7. Python入门学习笔记(3)
  8. 小学计算机应用能力考核记录,中小学教师信息技术应用能力校本应用考核规范...
  9. 新胖子公式 (10 分)
  10. Python学习路程day9
  11. 万用表如何进行欧姆校零
  12. 学习之苦也正是学习之甜------知识的本质
  13. 微信企业付款至银行卡 详细Demo 独立封装
  14. 饿了么api接口 php,饿了么接口:php
  15. SpringBoot 中使用 网易邮箱 或 qq邮箱 发送信息
  16. 用java画菱形_【风马一族_Java】使用java,画出任意大小的菱形
  17. 依托数网星工业互联网平台构建能源管理平台,助力企业能耗结构优化
  18. 用docx把文字写入word并且插入图片、表格
  19. 记一次拉去代码失败的解决过程Permission denied, please try again. git@code.odrcloud.cn: Permission denied
  20. 如何理解高内聚,低耦合

热门文章

  1. linux wenj 立即生效_【新书连载】测试工程师核心开发技术(3)—远程登录Linux系统...
  2. Java中的Redis的思维导图_Redis思维导图
  3. javaScript学习笔记之类型转换
  4. HTML 页面自动刷新
  5. 手写弹出框,设置遮罩,布局设计。
  6. 洛谷 P1018乘积最大
  7. 一起动手打造个人娱乐级linux
  8. mysql在mac上的坑
  9. Javascript之创建对象(原型模式)
  10. PostgreSQL 中的递归查询 与oracle 的比较