1、auto:自动变量,由编译器自动分配释放,通常在栈上分配;
2、register:寄存器变量,建议将寄存器存储到变量中使用;
3、volatile:CV特性中的一员,指定的变量的值不可被当前进程或者线程所改变,但是指定变量的值有可能会被系统或者其他进程改变;
4、extern:指定对应变量为外部变量(全局变量),范围为整个工程中的所有文件可用,extern 引用全局变量主要起声明变量或函数的作用,主要作用是可以在同一工程下的一个文件中引用另一个文件中的变量或者函数;
例子如下main.c文件中引用b.c文件中的num变量。
main.c
#include<stdio.h>
int main()
{
extern int num;
printf("%d",num);
return 0;
}
b.c
#include<stdio.h>
int num = 5;
void func()
{
printf("fun in a.c");
}
注意:只有当一个变量是一个全局变量时,extern变量才会起作用;
extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量;
extern关键字只需要指明类型和变量名就行了,不能再重新赋值。
extern int num=4;错误写法
5、const:CV特性中的另一位成员,在声明中使用所修饰的对象为常量,不能够被修改,存在常量区。
const它的作用是限定一个变量不允许被改变,只拥有只读功能。
const是给系统看,让系统不要改变我的值。
const也是给程序员看,让程序员看这里为什么要用const,到底能不能改这个值
6、static:静态变量有规定作用域/静态存储的作用
规定作用域:对于工程内的全局变量,以文件划分只对当前的文件可见;
静态存储:调用结束后存储空间不释放;
static可以修饰变量(全局变量、局部变量),存储在静态数据区
全局变量:使得其作用域仅限在被定义的文件中,其他文件没有访问权限;
局部变量:在某个函数体内定义的局部变量,只能在整个函数体内部访问;函数运行结束静态局部变量不会被销毁,存储空间不释放;
static修饰函数:被称为静态函数/内部函数
用来表示不能被其他文件访问的函数,但是可以通过嵌套的办法调用。