变量静态声明是否会被执行多次(static)
如下部分,是一个函数的一部分,当这个函数被执行多次,声明部分,是否会被多次执行呢?
static char sep = ' ';
static int num = 0;
printf("this is %2d:sep=%2c----string=%8s\r\n",num,sep,string);
sep = ',';
构建了一个实例用于分析:
#include <stdio.h>
void prt_num_list();
void generater_init(char *string);
int main()
{
prt_num_list();
generater_init("a");
generater_init("b");
return 0;
}
void prt_num_list()
{
printf("\r\n");
int i = 0;
int j = 0;
for(i=0;i<5;i++){
for(j=0;j<10;j++) {
printf("%1d",j);
}
}
printf("\r\n");
return;
}
void generater_init(char *string)
{
static char sep = ' ';
static int num = 0;
printf("this is %2d:sep=%2c----string=%8s\r\n",num,sep,string);
sep = ',';
num++;
printf("this is %2d:sep=%2c----string=%8s\r\n",num,sep,string);
sep = '.';
num++;
return;
}
执行结果为:
01234567890123456789012345678901234567890123456789
this is 0:sep= ----string= a
this is 1:sep= ,----string= a
this is 2:sep= .----string= b
this is 3:sep= ,----string= b
分析:
1.void generater_init(char *string)中的num在第2次执行时,没有被清0,sep 在两次执行时,也没有都被置为' ';
推论:静态声明的变量,声明时的赋值仅在,声明的首次被执行。
注:以上推论在如下环境中,用gcc编译,并被执行。
~/test2$ cat /proc/version
Linux version 4.4.0-64-generic (buildd@lgw01-56) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #85-Ubuntu SMP Mon Feb 20 11:50:30 UTC 2017