宏定义 #define 和常量 const 的区别
学习笔记!参考链接
一、类型和安全检查不同
宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;
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 的区别相关推荐
- iOS 宏(define)与常量(const)的正确使用
2019独角兽企业重金招聘Python工程师标准>>> 在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 ...
- 宏定义Define的一些用法
---转载百度文库 一. #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处 ...
- [C语言]宏定义#define的使用详解
一.宏定义定义常量 预定义符号 FILE //进行编译的源文件 LINE //文件当前的行号 DATE //文件被编译的日期 TIME //文件被编译的时间 STDC //如果编译器遵循ANSI C, ...
- C语言 | 预处理 | 宏定义 | #define | 定义函数
文章目录 预处理 预处理运算符 宏定义 无参宏定义 带参宏定义 宏定义-定义函数 此文主要介绍宏定义,并在介绍宏定义时举例介绍预处理命令 预处理 参考:C 预处理器 | 菜鸟教程 重要的预处理器指令如 ...
- 宏定义#define整理
一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...
- 枚举(enum)、宏定义(#define)、结构体(struct)的拾遗
1.宏定义 1.1.不带参数的宏定义 #define 标识符 字符串 例如:#define PI 3.1415926 说明: (1)宏名一般习惯用大写字母表示,但并非规定,也可以用 ...
- [C++]宏定义#define A B C
C++关于宏定义的用法,有形如#define A B C的格式,此时B和C都是已知的字符串常量. 在宏定义中. 可以把两个常量字符串连在一起 如果#define A "a" 那么宏 ...
- VS无法使用宏定义#define解决方案
在使用VS编译C语言或者其他语音用到宏定义#define,VS会报错提示(以VS2019为例) 解决方式: 在工具-->选项-->文本编辑器-->C/C++-->查看中,将&q ...
- 预处理命令 宏定义 #define #undef
预处理命令 源程序中以#开头的行称为预处理指令. 预处理指令并不是C语言的语法成分,而是传给编译程序的指令. 包括: 宏定义 #define #undef 文件包含 #include 条件编译 #if ...
最新文章
- 多布局怎么搭建_小展位大吸引力,如何设计搭建出精致的展台?
- C++中的Dll内存问题
- android应用开发(16)---AndroidManifest.xml
- Android之深入WebView
- 【MySQL】MySQL常见的读写分离方法
- python 近期用到的基础知识汇总(主要是numpy和pytorch的相关矩阵变化函数)(一)
- Python入门学习笔记(3)
- 小学计算机应用能力考核记录,中小学教师信息技术应用能力校本应用考核规范...
- 新胖子公式 (10 分)
- Python学习路程day9
- 万用表如何进行欧姆校零
- 学习之苦也正是学习之甜------知识的本质
- 微信企业付款至银行卡 详细Demo 独立封装
- 饿了么api接口 php,饿了么接口:php
- SpringBoot 中使用 网易邮箱 或 qq邮箱 发送信息
- 用java画菱形_【风马一族_Java】使用java,画出任意大小的菱形
- 依托数网星工业互联网平台构建能源管理平台,助力企业能耗结构优化
- 用docx把文字写入word并且插入图片、表格
- 记一次拉去代码失败的解决过程Permission denied, please try again. git@code.odrcloud.cn: Permission denied
- 如何理解高内聚,低耦合