至于C语言中static保留字的使用

       
 static存储类型可以用来所有变量,无需考虑变量声明的职务。但是图被片表面和片内部时怀有不同的打算。

       
(1)当作用于函数内部时,和每次程序离开所在块就会丢失值的自发性变量不同,static变量会保留下去,块内之static变量只会于程序执行前进行相同浅初始化,而自动变量则会每次都初始化。接下来对这特性开展验证。

 1 #include "stdio.h"
 2 void test(void)
 3 {
 4 static int a = 10;
 5 int b = 10;
 6 printf("a = %d,b = %d\n",a,b);
 7 a = 20;
 8 b = 20;
 9 printf("a = %d,b = %d\n",a,b);
10 a = 30;
11 b = 30;
12 printf("a = %d,b = %d\n",a,b);
13 printf("***************\n");
14 }
15 void main()
16 {
17 test();
18 test();
19 }

 C语言 1

   test()函数中初始化了点儿个变量,static变量a和自行变量b,第一蹩脚调动用得后结果还是千篇一律的,但是当形成第二次等的调用以后,不同之结果出现了,a=30,这便是于上次调用完成后初始化的30,退出函数后连无会见掉,再次调用函数时也不见面初始化,只有以赋值的时刻才会改。

   (2)当作用于函数头时。此时底函数只在时文件中,对于其余文件不可见。验证程序如下:

test.c

 1 /*test.c*/
 2 #include "test.h"
 3 #include "stdio.h"
 4 static int a = 10;
 5 static void test_a()
 6 {
 7    printf("a = %d\n",a);
 8 }
 9 void put()
10 {
11     test_a();
12 }

test.h

1 /*test.h*/
2 #ifndef __TEST_H__
3 #define __TEST_H__
4 void put();
5 static void test_a();
6 #endif

 main.c

1 #include "stdio.h"
2 #include "test.h"
3 void main()
4 {
5   put();
6   test_a();
7 }   

运作后发了之类的错误:

1>c:\users\administrator\desktop\20171212\2017121201\2017121201\main.c(9):
error C2129: 静态函数“void test_a()”已扬言但无定义

1>
c:\users\administrator\desktop\20171212\2017121201\2017121201\test.h(6)
: 参见“test_a”的声明

有鉴于此,static在函数头上时时仅能够于时下文件中。