博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
宏定义(#define)和常量(const)的区别
阅读量:4615 次
发布时间:2019-06-09

本文共 752 字,大约阅读时间需要 2 分钟。

    最近开始准备一边做实验室的研究,一边记录一些遇到的编程中的小知识点。今天在测试对矩阵进行SVD分解时,需要定义矩阵的行和列的大小,我习惯性的用宏定义来定义了这两个变量,在运行的时候,就开始思考宏定义和常量之间有些什么样的分别。

参考了一些别人的说法,自己在这里做一个小小的总结。

类型和安全检查不同

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

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

编译器处理不同

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

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

存储方式不同

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

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

定义域不同

void f1 (){    #define N 12    const int n 12;    }    void f2 (){    cout<
<

定义后能否取消

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

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

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

是否可以做函数参数

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

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

转载于:https://www.cnblogs.com/scut-linmaojiang/p/4722338.html

你可能感兴趣的文章
兼容性
查看>>
自动执行sftp命令的脚本
查看>>
转 Merkle Tree(默克尔树)算法解析
查看>>
网络编程基础之socket编程
查看>>
各种浏览器的user-agent和
查看>>
Restful levels
查看>>
Phonegap移动开发:布局总结(一) 全局
查看>>
Java 变参函数的实现
查看>>
Spring重温(四)--Spring自动组件扫描
查看>>
Android设计图(标注、切图)
查看>>
strstr and strpos
查看>>
hash算法与拉链法解决冲突
查看>>
如何使用jQuery判断一个元素是否存在
查看>>
HTML5中的Canvas(颜色)【转载】
查看>>
420. Strong Password Checker
查看>>
用字节流添加内容至txt中
查看>>
手写算式的识别与运算
查看>>
jquery 1.9 1.8 判断 浏览器(IE11,IE8,IE7,IE6)版本
查看>>
Reporting Services 的一些问题
查看>>
利用Redisson实现分布式锁及其底层原理解析
查看>>