前言
这两天在梳理自己C语言的知识,发现写了这么久的代码,居然所有的知识点都在自己的脑袋里。这可不好,万一老了呢。。。。
接下来的几天里,会以文字的形式,将这些知识整理出来,分享给大家。
想要看看英文版本的同学,可以详细阅读 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
C语言存储类别说明符
存在类别说明符 (storage-class-specifier)包含:typedef, extern, static, _Thread_local, auto, register。除了_Thread_local需要使用static或extern一起使用外,其他的说明都是可以单独使用的。
1. typedef
用于给某个数据类型定义一个新的名字。
如:
typedef int32 ac_int32;
typedef struct _student_st {
int age;
char* pName;
} student_st;
2. extern
引用另一个文件中的函数或全局变量。注意,这些函数和变量是不能被static修饰的。
如:
extern int otherInt;
3. static
被修饰的函数和变量,只能在当前的文件中使用。当static修改局部成员变量时,该变量只会被初始化一次,直到进程结束,才会被销毁。被static修饰的变量将会被保存在全局数据区的静态变量部分。
如:
static int glbInt;
4. _Thread_local (C++中会使用到)
5. auto
表示自动存储的临时变量,也用作自动匹配变量的数据类型。
如:
auto int var = 4;
auto var1 = 0;
6. register
寄存器变量,说明该变量的使用频率非常高,希望编译器尽量将它放到寄存器中。当然,编译器也可以将它忽略。
使用这个修饰符,需要注意:
变量需要是CPU能接受的类型,即单个值,长度小于整型。
只能用到局部变量或函数形参。
不能使用&来引用该变量的地址。
过量的寄存器变量不会对代码产生太大的影响,编译器是可以忽略的。