1 作用时间不同。
宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以。
2 本质类型不同。
宏定义的只是一段字符,在编译的时候被替换到引用的位置。在运行中是没有宏定义的概念的。而变量在运行时要为其分配内存。
3 宏定义不可以被赋值,即其值一旦定义不可修改,而变量在运行过程中可以被修改。
4 宏定义只有在定义所在文件,或引用所在文件的其它文件中使用。 而全局变量可以在工程所有文件中使用,只要再使用前加一个声明就可以了。换句话说,宏定义不支持extern。
宏定义不分配内存,全局变量定义分配内存。宏定义的值在程序中是不能改变的,只是宏替换,全局变量的值是可以在程序中更改的。宏定义不存在类型问题,它的参数也是无类型的。
全局变量 是可以在程序中任何地方使用 而且是可以修改的 宏定义也可以在任何地方使用 但是不能在之后修改 数据类型没有限制的
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
表达更清晰 增加可读性
#define 产生嵌入代码的方法
对嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。