C语言中static关键字的两个作用:文件与函数作用域
C语言中的静态关键字具有两个函数,一个是文件的范围,另一个是函数范围。

1。文件操作域
文件操作域关键字静态的作用是,静态中所述的全局变量和函数状态不得由其他文件引用,例如:
//这是mystr.c文件的内容
#包括
静态int num = 10;
int mynum = 100;
静态int str_len(char *str)
返回strlen(str);
int mystr_len(char *str)
返回str_len(str) + num;
当使用静态关键字添加mystr.c文件中的str_len函数时,您无法在其他位置重复使用此函数,例如,您无法编写以下内容:
//这是main.c的内容
#包括
int main()
int len;
len = str_len(“ Hello,world \ n”);
printf(“%d%d \ n”,num,len)
返回0;
gcc main.c mystr_len.c
它不会被编译,因为MyStr.C中的NUM变量和STR_LEN函数使用静态关键字,从而导致它们在Mystr.C中使用。例如,文件中的mystr_len函数可以引用num变量和str_len函数。
//这是main.c的内容
#包括
int main()
int len;
len = mystr_len(“你好,世界\ n”);
printf(“%d%d \ n”,my_num,len)
返回0;
当不使用静态关键字时,相当于extern,也就是说
int mystr_len(char *str)
返回str_len(str) + num;
和
extern int mystr_len(char *str)
返回str_len(str) + num;
是一样的。
2。功能域
静态的另一个用途是函数内部的静态变量。最常用的情况是
INT *测试
int num = 100;
int *ptr =#
返回ptr;
int main()
printf(“%d \ n”, *test);
返回0;
此功能返回整数NUM的指针。在主函数中的打印*测试将具有段错误,因为只能在测试中访问NUM作为测试功能。以下过程是正确的。
INT *测试
静态int num = 100;
int *ptr =#
返回ptr;
int main()
printf(“%d \ n”, *test);
返回0;
在此程序中,数字变量添加了一个关键字静态。功能运行后,仍然可以在其他地方引用它,但是无法通过变量名称直接访问它。相反,有必要通过指针间接访问。不在功能堆栈中。读者可以将其视为一种特殊的全局变量,但是其他地方只能通过指针访问,并且不能通过变量名称直接访问。