C++中,宏定义与一般的定义有什么区别?

比如#definePI=3.141与doublePI=3.141和constPI=3.141它们之间有什么区别什么时候应该用哪个个?#define好像是什么“在编译时替换... 比如
#define PI=3.141

double PI=3.141

const PI=3.141
它们之间有什么区别
什么时候应该用哪个个?
#define 好像是什么 “在编译时替换”,是什么意思啊 ,最好说具体点
还有如3楼所说“编译器直接将宏扩展成定义的内容 ”定义的是什么内容?
展开
 我来答
kaixingui2012
2015-11-09 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6305万
展开全部

C/C++中的宏定义是进行符号常量定义,该定义用于定义一种符号信息用来表示一些特殊的信息,使源代码更具有可读性,同时,也可以提高系统的可移植性。宏定义是在编译时进行解释与替换的,实际运行中的代码是没有宏定义符号的。而一般变量或常量的定义在系统运行中,是有自己的内存空间,访问权限,和生存周期的。

宏定义常量

#define PI 3.141
注意:1、符号常量与数值间没有等号  2、该语句不需要以分号结尾
如:
#define PI = 3.141   语法上无大问题,但应用中可能会出错,编译时,所有的PI会替换成‘= 3.141' 
#define PI 3.141 ;   语法上无大问题,但应用中可能会出错,编译时,所有的PI会替换成‘3.141 ;’

变量定义

double PI=3.141 ; //定义一个变量PI,在内存中会给变量PI分配一个空间,其空间中存储了3.141,在使用中,可以随时改变PI值,如:PI=3.1415926;

常量定义

const  PI=3.141 ;  //因为没有写类型,默认为int类型,所以,这里的PI值实际为3
const double PI=3.141 ; //正确定义一个浮点型常量
  1. 常量与变量的差别是:常量一经定义后,就不能再修改!如果在使用中修改PI,则编译或运行时会出错,如VC6报错:error C2166: l-value specifies const object

  2. 常量与宏定义常量的区别是: 宏定义会在预处理阶段将用define定义的内容对代码中相应的标识符进行替换(编译期替换,编译后宏消失)。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。const定义的常量,在程序运行时在常量表中,系统为它分配内存。

百度网友44fea63a2
2011-02-14 · 超过23用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:59.6万
展开全部
生存域和分配空间的区别。

#define 定义,宏会从当前生效,一直到当前文件结束。
且变编译时会进行宏扩展 遇到PI 会自动被编译器替换为3.141,不会分配空间

double 和const定义遵循一般的变量生存域原则。即从当前开始到下个" }".

void test()
{

{
double k ;//k的生存域开始
..............
} //k的生存域到此结束

..............................
}
double 会为变量分配空间,const 会将常量分配到全局数据区。

由于define定义没有空间,即不能将宏的指针赋值给变量或常量。

编译时替换,因为将源代码翻译成可执行的文件时,要经过编译和链接,才能生成可执行文件(exe),也就是在这个过程中编译器直接将宏扩展成定义的内容
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Wz_LOVE_Cdj
2015-10-08 · TA获得超过650个赞
知道小有建树答主
回答量:710
采纳率:54%
帮助的人:371万
展开全部
要说区别其实也没有什么,主要都是为了使用方便,宏定义的是一个常量,一般定义可以是常亮也可以是变量,另外一般的宏定义是全局的,可以任意引用,一般的定义有一定的作用域
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苹果砸向牛顿
2011-02-18 · TA获得超过121个赞
知道答主
回答量:57
采纳率:0%
帮助的人:19.8万
展开全部
#define PI=3.141 //在编译的时候替换

//下面是执行时分配单元
double PI=3.141 //变量 可以重新赋值
const double PI=3.141 //常值变量 不可以重新赋值
简单说就是double可重新赋值,而const不可重新赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2011-02-13 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4544万
展开全部
#define PI=3.141 //在编译的时候替换

//下面是在执行的时候分配单元
double PI=3.141; //变量,可以重新赋值
const double PI=3.141; //常值变量,不可以重新赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式