我有两个C文件1.c和2.c
#include<stdio.h>
static int i;
int func1(){
i = 5;
printf("\nfile2 : %d\n",i);
return 0;
}
#include<stdio.h>
int i;
int main()
{
func1();
printf("\nFile1: %d\n",i);
return 0;
}
我用“gcc 1.c 2.c -o st”编译了这两个文件 输出如下
file2 : 5
File2: 0
我期待输出如下
file2 : 5
File2: 5
我想在两个文件中访问相同的变量“i”。 我该怎么办?
答案 0 :(得分:11)
选择一个存储变量的文件。不要使用static
。 static
的重点是保持变量的私密性和其他模块不可触及。
在所有其他文件中,使用extern
关键字来引用变量:
extern int i;
答案 1 :(得分:6)
永远不会有理由在另一个文件中访问静态变量。您似乎不知道为什么使用static关键字。在文件范围(外部函数)声明变量有两种方法。
全局变量
int i;
优点:
缺点:
本地/私人变量
static int i;
优点:
缺点:
我个人认为,没有理由使用全局变量或extern关键字。我已经编程了15年以上,从来没有使用过。我编写了从实时嵌入式系统到Windows GUI绒毛应用程序的所有内容,我从未需要在任何形式的应用程序中使用全局变量。此外,它们在几乎所有已知的C编码标准中都被禁止。
答案 2 :(得分:1)
static
个变量只能在一个翻译单元中访问,这意味着只有在其中定义的文件中的代码才能看到它。 Wikipedia Article有一个很好的解释。在这种情况下,要跨多个文件共享变量,您可以使用extern
。
答案 3 :(得分:0)
不推荐,但我们可以使用带有extern存储类的指针来实现它。
在2.c
static int i;
int *globalvar = &i;
在1.c
extern int *globalvar;