全局变量:
全局变量具有全局作用域。,它只编译期被始化一次,它不能用变量来初始化。全局变量只需要在一个源文件中定义,就可以作用于所有的源文件。在其他不包含全局变量定义的源文件中需要用extern关键词来再次声明这个全局变量
局部变量:
局部变量只有局部作用域,它只在函数调用执行期间存在,函数一次调用执行结束后,变量被撤销,其所占用的的内存也被回收。
静态全局变量:
静态全局变量具有全局作用域,,它只编译期被始化一次,它不能用变量来初始化。它作用于定义它的文件里,不能作用到其它的文件里。这样即使多个不同的源文件定义了同名的静态全局变量,他们也是不同的变量。
静态局部变量:
静态局部变量只有局部作用域,它只编译期被始化一次,它不能用变量来初始化。在它初始化之后便一直存在,直到程序运行结束。它与全局变量的区别是:全局变量是对所有的函数是可见的,而静态局部变量只对定义自己的函数体始终可见。
宏:
宏定义又称为宏代换、宏替换,简称“宏”。在预编译(即宏展开)阶段使用具体的内容替换宏名,预编译过程是不做语法检查的,这样导致在宏在程序中出错不好判断。
宏与变量的区别:
1. 宏定义不分配内存,变量定义需要分配内存
2. 宏不分数据类型,变量区分数据类型。
3. 宏定义之后值是不能改变的,变量的值是可以改变的
宏与const常变量的区别:
1. 宏系统不为它分配内存,const定义的常量系统为它分配内存
2. 宏在预编译阶段直接进行替换过,不进行数据类型及语法的检验, const定义的常量在编译时进行严格的类型和语法检验,可以避免出错。
分配内存空间:
分配内存空间:
局部变量分配在栈空间;
全局变量、静态变量都分配在静态存储区;
宏不分配内存空间