4、常见关键字
最后一部分说一下常见的关键字
注意:关键字不能用来命名!!!
(易错)#define不是关键字
1. auto break case char const continue default do double else enum 2. extern float for goto if int long register return short signed 3. sizeof static struct switch typedef union unsigned void volatile while
这里都是常见的关键字,里面的好多前面也见识过了,这里着重强调几点:
关键字typedef
typedef顾名思义是类型定义,这里理解成类型重命名
1. //将unsigned int 重命名为uint, 所以uint也是一个类型名 2. typedef unsigned int uint; 3. int main() 4. { 5. //观察num1和num2,这两个变量的类型是一样的 6. unsigned int num1 = 0; 7. uint num2 = 0; 8. return 0; 9. }
就是如上面这样理解的,自己好好体会一下呗!有时候这样命名可以节约名字的长度哈哈哈哈,是不是很方便呢?
关键字static
在C语言中:
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
这里面几条我们一条一条给大家分析一下:
1. 修饰局部变量
这个是未用static的
1. #include <stdio.h> 2. void test()//写的一个测试函数 3. { 4. int i = 0; 5. i++; 6. printf("%d ", i); 7. } 8. int main() 9. { 10. int i = 0; 11. for (i = 0; i < 10; i++) 12. { 13. test();//打印出10次1 14. } 15. return 0; 16. }
然后我们看看用static修饰局部变量
1. #include <stdio.h> 2. void test() 3. { 4. //static修饰局部变量 5. static int i = 0;//这里表明了i在函数结束的时候并没有被释放掉,而是依旧存在 6. i++; 7. printf("%d ", i); 8. } 9. int main() 10. { 11. 12. int i = 0; 13. for (i = 0; i < 10; i++) 14. { 15. test(); 16. } 17. return 0; 18. }
因为没有被释放,所以i不断的增加1,导致上述结果的出现!
明白了没有??
static修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
2. 修饰全局变量
分两个.c文件,在add.c文件中命名的数据g_val是全局变量,可以在test.c文件中直接使用
结果如下
完美打印了是不是!!!
哈哈哈
下面我们用一下static修饰一下全局变量
当我们在add.c文件中使用static修饰全局变量时,系统会报错!!!
原因是:当用static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性,其他的源文件(.c)就不能再使用这个全局变量了。
3. 修饰函数
最后来看修饰函数的时候:
我们的函数(实现加法)放在add.c中
主函数在test.c中
这个时候我们运行的结果是这样的
正好实现了目的呢!
那么我们看看static修饰后的:
运行后:
是的,它再次报错了,而结果也是同修饰全局变量时一样,无法解析
这也就是说,这个函数现在进不到主函数了,主函数中的函数相当于没有定义,系统不能够识别。
所以:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用