Why a global variable is defined as static in this C program?
我正在尝试使用本教程学习C。这里有一个例子,作者试图学习什么是
这就是例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> /* function declaration */ void func(void); static int count = 5; /* global variable */ main() { while(count--) { func(); } return 0; } /* function definition */ void func( void ) { static int i = 5; /* local static variable */ i++; printf("i is %d and count is %d ", i, count); } |
我的问题是:为什么他/她被定义为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> /* function declaration */ void func(void); int count = 5; /* global variable */ main() { while(count--) { func(); } return 0; } /* function definition */ void func( void ) { static int i = 5; /* local static variable */ i++; printf("i is %d and count is %d ", i, count); } |
我是说,我们什么时候必须使用第一个程序,什么时候必须使用第二个程序?
在您的特定示例中,将您的
如果您在两个不同的翻译单元(即在
作为例外,您可以在两个不同的翻译单元中声明一个同名的全局变量,而不必显式初始化它。名称引用相同且唯一的全局(初始化为0)。
所以拥有
1 2 | // in file foo1.c int globalcount; // a global variable *declaration* |
和
1 2 | // in file foo2.c int globalcount; // a global variable *declaration* |
和
1 2 | // in file foo1.c int globalcount = 0; // a global variable *definition* with initialization |
和
1 2 | // in file foo2.c extern int globalcount; // an external variable declaration |
实际上,这个外部声明通常应该在一些头文件
因此,插件也看不到静态变量(主程序的)。阅读更多关于可见性属性(在Linux上)的内容,使变量仅由单个插件或共享库(但不在其外部)可见。
阅读链接器和动态链接器上的wikipage,然后阅读Levine的图书链接器和加载器。
实际上,我建议对非局部变量(全局变量和静态变量)使用唯一的名称,以便可读性和方便性(因为
在一些用C编写的免费软件中寻找例子。
全局变量的static使其仅对该文件(编译单元)是全局的。它将无法从其他文件(编译单元)访问