#define
定义的指定,程序在预处理阶段将用#define所定义的内容只是进行了替换。因此程序运行时,常量表中并没有用#define所定义的宏,系统并不为它分配内存,并且在编译时不会检查数据类型,出错的概率要大一些。
注意:宏只是简单的替换
#define N 2 + 3
int a = N / 2;
//a的值就是:a = 2 + 3 / 2 = 3.5;
const
定义的常量,在程序运行时是存放在常量表中,系统会为它分配内存,并且在编译时会进行类型检查。
volatile
优化器在用到这个变量时必须每次都要小心地重新读取这个变量值,而不是使用保存在寄存器里的备份