搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
花生_TL007
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
详解Transformer中的Encoder_transformer模型encoder使用
2
ADB 操作命令及其详细用法
3
1. 实现一个单链表,链表初始为空,支持三种操作:_实现一个单链表,链表初始为空,支持三种操作: (1) 向链表头插入一个数; (2) 删除第
4
React入门之使用 create-react-app 创建类似 vue-cli 的项目脚手架_vue-cli 和 create-react-app
5
代码打补丁的利器——diff和patch_windows如何使用diff文件打补丁
6
吴恩达:别光盯着GPT-5,用GPT-4做个智能体可能提前达到GPT-5的效果
7
halcon学习笔记(10)——标定_halcon10 多点标定函数
8
【C++练级之路】【Lv.18】哈希表(哈希映射,光速查找的魔法)
9
Android App开发教程——使用Chaquopy轻松结合Python_com.chaquo.python
10
Java 中模板方法模式,请用代码具体举例
当前位置:
article
> 正文
C语言——#define与const的区别
作者:花生_TL007 | 2024-04-10 18:45:15
赞
踩
C语言——#define与const的区别
C语言——#define与const的区别
define与const都与常量有关。define是
宏定义
,它可以把一个标识符变成一个常量,而const是一个修饰符,它可以修饰一个变量为常类型,使其不可被修改。
本质上两者不同,define修饰出来的是常量。并且是真常量。
而const修饰的是假常量,它本质还是变量,只不过是不能修改值。
为什么说define修饰出来的是真常量呢?因为,define是宏定义,是宏替换!意味着程序在编译前期会进行文本替换,例如代码define PI 3.14,编译器会将代码中所有出现PI的地方全部用3.14替换,然后在进行编译,所以本质它就是一个常量!
至于const,const一般修饰于定义变量的前面,比如const int a=10,意味着a就一直是10,是一个不可修改的变量。
往后视图给a重新赋值都会引发错误。这就是const修饰之后的结果,但请注意这里不可修改的原因其实是编译器在做检查,检查是否有修改这块内存上的值,一旦有就会报错!所以从根本上说,const修饰的变量依然是一个变量!只不过编译器不让修改而已!
两者的区别
编译器处理方式不同
define 宏是在预处理阶段展开。
const 是编译运行阶段使用。
类型和安全检查不同
define 宏没有类型,不做任何类型检查,仅仅是展开。
const 有具体的类型,在编译阶段会执行类型检查。
存储方式不同
define 宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存(宏定义不分配内存,变量定义分配内存)。
const 会在内存中分配(可以是堆中也可以是栈中)
const可以节省空间,避免不必要的内存分配。
const 定义常变量从汇编的角度来看,只是给出了对应的内存地址,而不是像define一样给出的是立即数,所以,const定义的常变量在程序运行过程中只有一份拷贝(因为是全局的只读变量,存在静态存储区),而define定义的常变量在内存中有若干个拷贝。
编译器通常不为普通const常变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很好。
宏替换只做替换,不做计算,不做表达式求解。
宏预编译时就替换了,程序运行时,并不分配内存。
总结
类别
define
const
何时处理
编译期间进行宏替换
编译期间检查是否有修改
谁来执行
由系统判断是否被修改
由编译器限制
存储位置
数据常量在内存只读区
变量在哪里就在哪里
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/花生_TL007/article/detail/400411
推荐阅读
article
#旭日
X3
派首百尝鲜# 【AI健身实体机】
Arduino
使用
MA
X3
0102
人体心率血氧检测模块在X...
#旭日
X3
派首百尝鲜# 【AI健身实体机】_
max30105
was
not
found
.
please
check
w...
赞
踩
article
Android
studio使用
JDBC
连接
My SQL实现登陆
注册
修改(用户登录界面)详解_and...
一,准备工作1.下载
mysql
-connector-java2.在
Android
Manifest.xml中配置添加 <...
赞
踩
article
【笔记】最佳
日志
管理
工具
:51个有用的
日志
管理
、监视、
分析
等
工具
_
goaccess
和
syslog
...
最佳
日志
管理
工具
:51个有用的
日志
管理
、监视、
分析
等
工具
痛苦的纯文本
日志
管理
日子一去不复返了。虽然纯文本数据在某些情况下...
赞
踩
article
Docker
安全
_docker
安全
性...
好的
安全
性是基于分层隔离的,
Docker
有很多分层。
Docker
支持所有主流 Linux
安全
机制,同时
Docker
...
赞
踩
article
防火墙
iptables
_
iptables
防火墙
...
由软件包
iptables
提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告诉内核如何...
赞
踩
article
安全
测试
概述和
用例
设计_
测试
用例
安全
测试
...
通过对系统进行精心、全面的脆弱性
安全
测试
,发现系统未知的
安全
隐患并提出相关建议,确保系统的
安全
性。系统级别:包括对操作系...
赞
踩
article
基于
主从
博弈
的主动
配电网
阻塞
管理
采用双层模型
进行
求解
上层
决策边际报价,下层
求解
出清电价和
运行
方案反...
在可中断负荷和可调节负荷以及电压约束的场景下,系统的
管理
策略主要是根据负荷的中断能力和调节能力,以及电压的约束条件,确定...
赞
踩
article
【
解决问题
】Git拉取代码
未能
对
git
remote
进行
身份验证
_
未能
对
git
remote
进行分...
对
git
拉取代码出现错误提供了解决办法_
未能
对
git
remote
进行分身验证
未能
对
git
remote
进行分身验证...
赞
踩
article
Disecting
the
Postgres
Bulk
Insert
and Binary Form...
IntroductionThis post delves deep into
the
world of bulk loa...
赞
踩
article
大
数据
中
数据
量打底有多
大
?
_
大
数据
数据
量...
先看下计量单位之间的换算: 1KB (Kilobyte 千字节)=1024B, 1MB (Megabyte ...
赞
踩
article
年少
不知
EFCore
好
,
错把
SqlSugar
当成宝
_
sqlsugar
与
efcore
...
背景:依然记得我的第一份WebApi项目使用得是
SqlSugar
,
当时还没有系统学习b/s这边的知识
,
跟着别人做项目用S...
赞
踩
article
Java——
TCP
UDP
Socket
编程_
java
tcp
socket
...
基础网络知识,Java——
TCP
UDP
Socket
编程_
java
tcp
socket
java
tcp
socket
...
赞
踩
article
React
状态
管理:安全高效地
修改
对象
属性
的
3
种方法...
直接
修改
对象
属性
是不被允许
的
,因为
React
的
不可变性原则要求我们创建一个全新
的
对象
,而不是直接
修改
原有
的
对象
。当应...
赞
踩
article
Rabbit
MQ 延迟插件
rabbitmq
_
delayed
_
message
_
exchange
的
安装
...
目录一、转载地址二、转载内容1、环境2、下载插件3、
安装
4、
安装
成功一、转载地址
Rabbit
MQ 延迟插件rabbit...
赞
踩
article
使用
机器人
操作系统
(
ROS
) 探索
Python
在
机器人
开发和控制中的功能_
python
ros
...
通过
Python
和
ROS
的结合,开发人员可以构建能够感知周围世界并与之交互的智能机器。随着
机器人
技术的不断发展,Pyth...
赞
踩
article
Mac
电脑
常用软件
免费下载网站...
mac
电脑
常用软件
下载地址
Mac
电脑
常用软件
免费下载网站 马克...
赞
踩
article
JDK
从8
升级
到
11
,
使用 G1 GC
,
HBase
性能下降
20%
。
JDK
到
底干了什么...
看完美团、字节、腾讯这三家的面试问题
,
是不是感觉问的特别多
,
可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面...
赞
踩
article
第1113期
AI
10
0
_
机器
学习
日报
(
2017
-
10
-
05
)...
AI
10
0
_
机器
学习
日报
2017
-
10
-
05
爱奇艺视频场景下的自然语言处理应用@蚁工厂基于Xgboost + LR +...
赞
踩
article
优秀的
开源
测试
工具
和
框架
推荐:精选十大神器!_
开源
软件
测试
工具
...
你是一位测试从业者,时刻关注着最新的
测试
工具
和
框架
。但在众多的选择面前,你是否感到困惑和无从下手?别担心!今天,我为你推...
赞
踩
article
OneNet
平台
鉴权
token
计算工具免费分享
_
c#
onenet
安全
鉴权
...
链接:https://pan.baidu.com/s/1tLNPIaPuAhCq71Hvxowvpg?ps:md,不要钱...
赞
踩
相关标签
人工智能
物联网
嵌入式硬件
ai
android-studio
mysql
sql
log
日志解析
日志管理
异常检测
日志分析
网络
服务器
运维
web安全
网络安全
安全
git
数据库
c#
.netcore
asp.net
udp