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楼所说“编译器直接将宏扩展成定义的内容 ”定义的是什么内容? 展开
#define PI=3.141
与
double PI=3.141
和
const PI=3.141
它们之间有什么区别
什么时候应该用哪个个?
#define 好像是什么 “在编译时替换”,是什么意思啊 ,最好说具体点
还有如3楼所说“编译器直接将宏扩展成定义的内容 ”定义的是什么内容? 展开
6个回答
展开全部
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 ; //正确定义一个浮点型常量
常量与变量的差别是:常量一经定义后,就不能再修改!如果在使用中修改PI,则编译或运行时会出错,如VC6报错:error C2166: l-value specifies const object
常量与宏定义常量的区别是: 宏定义会在预处理阶段将用define定义的内容对代码中相应的标识符进行替换(编译期替换,编译后宏消失)。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。const定义的常量,在程序运行时在常量表中,系统为它分配内存。
展开全部
生存域和分配空间的区别。
#define 定义,宏会从当前生效,一直到当前文件结束。
且变编译时会进行宏扩展 遇到PI 会自动被编译器替换为3.141,不会分配空间
double 和const定义遵循一般的变量生存域原则。即从当前开始到下个" }".
void test()
{
{
double k ;//k的生存域开始
..............
} //k的生存域到此结束
..............................
}
double 会为变量分配空间,const 会将常量分配到全局数据区。
由于define定义没有空间,即不能将宏的指针赋值给变量或常量。
编译时替换,因为将源代码翻译成可执行的文件时,要经过编译和链接,才能生成可执行文件(exe),也就是在这个过程中编译器直接将宏扩展成定义的内容
#define 定义,宏会从当前生效,一直到当前文件结束。
且变编译时会进行宏扩展 遇到PI 会自动被编译器替换为3.141,不会分配空间
double 和const定义遵循一般的变量生存域原则。即从当前开始到下个" }".
void test()
{
{
double k ;//k的生存域开始
..............
} //k的生存域到此结束
..............................
}
double 会为变量分配空间,const 会将常量分配到全局数据区。
由于define定义没有空间,即不能将宏的指针赋值给变量或常量。
编译时替换,因为将源代码翻译成可执行的文件时,要经过编译和链接,才能生成可执行文件(exe),也就是在这个过程中编译器直接将宏扩展成定义的内容
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要说区别其实也没有什么,主要都是为了使用方便,宏定义的是一个常量,一般定义可以是常亮也可以是变量,另外一般的宏定义是全局的,可以任意引用,一般的定义有一定的作用域
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define PI=3.141 //在编译的时候替换
//下面是执行时分配单元
double PI=3.141 //变量 可以重新赋值
const double PI=3.141 //常值变量 不可以重新赋值
简单说就是double可重新赋值,而const不可重新赋值
//下面是执行时分配单元
double PI=3.141 //变量 可以重新赋值
const double PI=3.141 //常值变量 不可以重新赋值
简单说就是double可重新赋值,而const不可重新赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define PI=3.141 //在编译的时候替换
//下面是在执行的时候分配单元
double PI=3.141; //变量,可以重新赋值
const double PI=3.141; //常值变量,不可以重新赋值
//下面是在执行的时候分配单元
double PI=3.141; //变量,可以重新赋值
const double PI=3.141; //常值变量,不可以重新赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询