C-关键字
首先列出C语言中标准定义的32个关键字:
其中的sizeof值得好好说一下,相信大多数对C语言不是很熟悉的人和我一样,最开始都把sizeof当成了一个函数来看了。下面我们打开编译器一探究竟。
发现a,b,c的值都是4,在c中,sizeof后面没有括号,所以得出结论:sizeof绝非函数。
其实sizeof在计算变量所占空间大小时括号可以省略,而在计算类型大小时不能省略。且一般情况下,sizeof是在编译时求值,所以sizeof(i++)不会引起副作用,就相当于sizeof(i)。在一般情况下,还是不要偷懒,乖乖的加上括号,继续装成一个“函数”,哈哈哈...
还有一个比较有意思的关键字是——register。这个关键字请求编译器尽可能地将变量存在CPU内部寄存器中,而不是通过内存寻址访问以提高效率。寄存器就是一块块小的存储空间,只不过其存储速度比内存要快的多(相比于在一大块内存里寻找某个地址上的数据)。虽然register修饰符速度非常快,但是使用它也有限制。register变量必须是能被CPU寄存器所接受的类型,也就是说register变量必须是一个单个的值,并且其长度应小于或等于整型的长度,而且register变量可能不存放在内存中,所以不能用取地址符“&”来获取register变量的地址。
我们来看看static关键字,static关键字看起来很安静,其实一点也不安静。在C语言中static关键字主要有两个作用:修饰变量、修饰函数。
1.修饰变量
我们都知道变量分为局部变量和全局变量,都存在于内存的静态区。
静态全局变量作用域仅限于变量被定义的文件中,其他文件即使使用extern声明也没法使用它。也就是说,作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码也不能使用它(想要使用就得在前面再加上extern )。
静态局部变量是在函数体里定义,就只能在这个函数里用,同一个文档中的其他函数也用不了。尤其需要注意的是,由于static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值也不会被销毁,函数下次使用时仍能用到这个值。我们打开编译器验证一下:
通过上面的例子,可以清楚看出两者的差别。
2.修饰函数
在函数前面加上static使得函数成为静态函数,但是这里的static的含义不是指存储方式,而是值对函数的作用域仅局限于本文件(所以也称内部函数)。使用内部函数好处是:不同的程序员在编写不同的函数时,不用担心自己定义的函数是否会于其他文件中的函数同名。
... ...