永发信息网

c语言中为什么字面常量与宏定义不占内存空间?

答案:1  悬赏:0  手机版
解决时间 2021-11-21 21:58
c语言中为什么字面常量与宏定义不占内存空间?
最佳答案
宏定义不占内存空间,因为宏在预处理阶段就会被替换掉,到了编译的阶段是没有宏存在的,它自然到不了可执行文件中,所以它不占内存空间。

  字面常量,占不占空间要看情况,我不知道C语言标准中是否对此事作出规定,我就谈谈gcc的处理方法吧,这个设计汇编的问题。
int a; 
a = 5;  将这段反汇编,得到


  可以看到,5是以立即数的形式出现的,所以它不占内存。

  然后再将a定义为float:

float a;
a = 5.0;
  可以看到,程序的最后定义了5.0的单精度浮点表示,然后将其传入eax寄存器,再赋值给a。

  另外,字符常量不占内存空间,字符串常量占内存空间。总之,整形常量是不占空间的,其他占。

追问可是在c语言中有说在 main函数中,“const double r=2.0”也定义了一个常量,但const修饰的r却占用存储空间,这又是怎么回事?追答你要注意,r实际上也是个变量,只是编译器发现修改r的语句会进行报错就是了,r确确实实是存储在内存中的,而#define定义的符号不是。追问为什么r也是变量啊?我好像对这个变量与常量的区分还不是很清楚。?追答  因为const定义的不是严格意义的常量,你可以通过巧妙的方法改变它的值。C++里的const常量是实际意义上的常量,它和#define定义的符号常量差不多相同。
  总之,想定义常量用#define就行了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
从石狮到南安香草世界要怎么搭车
2017年几月几日惊垫
李高扬的介绍
我右眼视力0.1,左眼0.7.着算不算弱视
天骄宾馆(益和诺尔街)地址好找么,我有些事要
信阳同城随叫随到跑腿能送什么?
生男孩报喜短信古文
大一物理 高悬赏
国臣新兴招待所地址好找么,我有些事要过去,
年轻人不读报纸的情况存在什么问题
2.25*0.16+264*0.0225+5.2+5.2*2.25+0.225*20
一汽高7车内雾气怎么排
公安和警察有什么区别?
为什么12寸笔记本比14寸贵这么多
孙家庄村地址在什么地方,我要处理点事!
推荐资讯
网上的只要身份证就能个人小额贷款怎么样!可
听见小猫哭是好事还是坏事
想买张2手显卡,但是都没发票可以买吗。他说
这是哪家钢铁厂的钢筋
女生挑戏男生幽默的话
B站上的一个很火的灵异动画片(类似停车场摄
水貂鼻子发干是什么原因造成的
出奇入神这个成语是什么意思
刚刚认识一个女孩子不知道她叫什么,想给她娶
如何用jq修改a标签的链接地址
哈尔滨市第122中学在那个位置
韩国电影《伟大的族谱》中间和结尾的插曲,纯
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?