C补遗:C语言里不那么面熟的关键字

C用了很久了,但是也没有说很系统平铺的整体看过,一直是用什么会什么,不用什么就过去了。既然C已经被我当做是一门已经掌握的语言,所以就重新扫一遍C里面不那么面熟的东西或者理解有偏差的东西,当做是个记录以备复习使用,也可以对C打个结了。 auto && register && static 怎么也没想到会把这三个放在一起,一个是C++中常用的声明类型的关键字,一个没见过的,和一个还算常用的,这里主要理解的偏差还是在 auto 上。 在C++中,auto作为一种自动判断变量类型的定义存在,比如当我使用 auto c = 10; 去定义 c 这个变量的时候,是和 int c = 10; 的作用是一样的,这样可以节省很多去考虑这个变量具体是什么类型以及大量的敲字母的时间,还可以避免一些打字错误,比如 vector<map<int,string>>::iterator a = 这种东西可以直接 auto a = 还是挺爽的。顺便这里提一嘴,C++中的 auto 后面必须赋值,否则编译器不知道到底要初始化成什么类型的。 在C中,auto 关键字是用来指定变量的存储位置的。这也是为什么要和 static 和 register 一起讲。 static 说过很多遍也用过很多遍了,是存储在静态存储区的,而这个不太常见的 register 就是指的平时我们使用中的变量,是直接存储在堆或者栈中的,所以 auto 关键字就只是用来指定是用 static 修饰的还是用 register 修饰的,也就是新建变量的存储位置,举例: int a = 10; //平时这样定义就相当于 auto in a = 10; auto相当于省略 register int b = 10; static int c = 10; 注意的是,平时我们在 int a = 10; 这样定义的时候就相当于省略了 auto 关键字,上面这段在定义的时候就是 a 和 b 定义是在堆或者栈中的,c定义在静态存储区中。而且在使用了 auto register static 修饰后,仍然需要增加变量类型,因为他们并不是定义变量类型的,而是变量的存储区域。 ...

3 min · 502 words · Jassy