1.const常量编译器可以对其进行数据类型安全检查,而#define却只是进行简单的字符替换,且还有可能产生“边际效应”。
何谓“边际效应”
如下代码:
定义两个宏 #define N 100
#define M 200+N
当程序出现如M*N的语句是,编程人员的意愿是100*(200+N),但实际上是100*200+N
2.有些调试程序可对const调试,但不会对宏调试。
3.当定义局部变量时,const作用域仅为函数内部,宏却是从定义点到程序结束点,很浪费。
本文探讨了C/C++中const常量与预处理器宏#define之间的差异。重点分析了const提供的类型安全检查、调试支持及作用域限制的优势,并通过实例说明了宏定义可能导致的边际效应问题。
1.const常量编译器可以对其进行数据类型安全检查,而#define却只是进行简单的字符替换,且还有可能产生“边际效应”。
何谓“边际效应”
如下代码:
定义两个宏 #define N 100
#define M 200+N
当程序出现如M*N的语句是,编程人员的意愿是100*(200+N),但实际上是100*200+N
2.有些调试程序可对const调试,但不会对宏调试。
3.当定义局部变量时,const作用域仅为函数内部,宏却是从定义点到程序结束点,很浪费。

被折叠的 条评论
为什么被折叠?