1.static 作用:
修饰局部变量,改变生命周期,使得生命周期变长。
上述程序解说:根据上一节笔记五个a=1的举一反三,当我们加入static 时,整个程序发生了变化。首先还是从int main()开始读起:i=0进入while判断成立,进入while的{}里的tset();转入void tset(){},此时的static int a=1是读了的,a++=2,printf输出的a结果是2;离开}跳到i++,i=1;回到while行进行判断,仍然成立,再次进入{tset(),转入void tset(){ 但是这次不再经过第四行,直接跳到第五行a++(因为上一次a=2的结果进行了保存,并没有销毁),这一次,printf打印出的a=3,后面以此类推,直到i++=5,回到while判断,不满足,不在进入while(){}直接跳到return 0 } 此程序结束。如果不知道怎么看程序走势,同时按住Fn F10,逐句看代码跑向即可。
虽然是两个.c文件,但是全局变量的作用范围应该是可以通用的,所以我们只需在源文件外的另一个文件里定义是前面附带extern 即可使用。但是,如果源文件中加入staic,另一个文件即使加了exrern也不可以!可以理解成这个全局变量的作用域被限制住了。
而修饰全局变量,改变了作用域,作用域变小,让静态的全局变量只能在自己所在的源文件内部使用,出了源文件就没法在使用了。
一般的进行函数声明 :
但是如果函数定义的源文件前加static,即使另一个文件进行了函数声明也不能运行成功。此时报错的的内容与static修饰全局变量有类似之处。
所以说明static修饰函数改变了函数的链接属性。(一个函数如果没有static修饰,它是具有外部链接属性的)
/*利用#define定义标识符常量
#include<stdio.h>
#define Max 100
int main()
{
int a=Max;
return 0;
}
#include<stdio.h>
int main()
{
int a=10;
int b=20;
int max=Max(a,b);/*函数方式定义两个数中的较大值*/
printf("max=%d\n",max);
return 0;
}