1.const常量编译器可以对其进行数据类型安全检查,而#define却只是进行简单的字符替换,且还有可能产生“边际效应”。
何谓“边际效应”
如下代码:
定义两个宏 #define N 100
#define M 200+N
当程序出现如M*N的语句是,编程人员的意愿是100*(200+N),但实际上是100*200+N
2.有些调试程序可对const调试,但不会对宏调试。
3.当定义局部变量时,const作用域仅为函数内部,宏却是从定义点到程序结束点,很浪费。
1.const常量编译器可以对其进行数据类型安全检查,而#define却只是进行简单的字符替换,且还有可能产生“边际效应”。
何谓“边际效应”
如下代码:
定义两个宏 #define N 100
#define M 200+N
当程序出现如M*N的语句是,编程人员的意愿是100*(200+N),但实际上是100*200+N
2.有些调试程序可对const调试,但不会对宏调试。
3.当定义局部变量时,const作用域仅为函数内部,宏却是从定义点到程序结束点,很浪费。