define和const的区别
- define定义的常量是没有类型的,如
#define MAX 255
,编译器只是把定义的变量名和变量值对应起来;const定义的常量是有类型的,存放在静态区中,如const float MAX = 255;
。也正是因为define无类型,所以没有类型安全的检查就有可能会有意想不到的错误,而const会在编译的时候进行类型检查 - define定义的变量是在预编译的时候完成的,只要程序中用到该变量的地方都要进行拷贝替换,内存消耗较大;const定义的变量在编译时确定它的值,只有一次拷贝。所以宏定义在程序中所消耗的内存要比const变量大得多
- define定义的常量是不可以用指针变量去指向的;const定义的常量是可以用指针指向该常量的地址
- define可以定义一些简单的函数;const不可以定义函数
- 编译器一般不给const常量分配存储空间,而是把它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
- 宏替换只做替换,不做计算,不做表达式求解
- 宏定义的作用范围仅限于当前文件。const在默认情况下是在当前文件内有效,当多个文件中出现了同名的const变量时,等同于在不同文件中分别定义了独立的变量。如果想在多个文件中共享同一个const对象,那么必须在变量定义之前添加extern关键字(声明和定义的时候都要加)