为什么很多人使用#define而不是const定义常量
1个回答
展开全部
在大规模的开发过程中,特别是跨平台和系统的软件里跨平台编译时,
一般都使用 #define 定义常量,主要是为了兼容性。
但是,从安全角度考虑,还是建议使用const定义常量。
#define是宏常量,无语法检测,只是字符替换。
而且,#define 不是语句 不要在行末加分号,否则会连分号一块置换。
所以我们在定义的时候,要养成一个良好的习惯,建议所有的层次都要加括号。
const常量有数据类型,而宏常量没有数据类型。
编译器可以对const常量进行类型安全检查。
而对宏常量只进行字符替换,没有类型安全检查,
并且在字符替换可能会产生意料不到的错误(边际效应)。
const定义常量从汇编的角度来看,
只是给出了对应的内存地址,
而不是象#define一样给出的是立即数,
所以,const定义的常量在程序运行过程中只有一份拷贝
(因为是全局的只读变量,存在静态区),
而 #define定义的常量在内存中有若干个拷贝。
因此,const相对提高了编译效率。
一般都使用 #define 定义常量,主要是为了兼容性。
但是,从安全角度考虑,还是建议使用const定义常量。
#define是宏常量,无语法检测,只是字符替换。
而且,#define 不是语句 不要在行末加分号,否则会连分号一块置换。
所以我们在定义的时候,要养成一个良好的习惯,建议所有的层次都要加括号。
const常量有数据类型,而宏常量没有数据类型。
编译器可以对const常量进行类型安全检查。
而对宏常量只进行字符替换,没有类型安全检查,
并且在字符替换可能会产生意料不到的错误(边际效应)。
const定义常量从汇编的角度来看,
只是给出了对应的内存地址,
而不是象#define一样给出的是立即数,
所以,const定义的常量在程序运行过程中只有一份拷贝
(因为是全局的只读变量,存在静态区),
而 #define定义的常量在内存中有若干个拷贝。
因此,const相对提高了编译效率。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询