测试在32位Linux x86上,我使用gcc 4.6.3
。
我有两个C源文件,分别是main.c
和foo.c
。它们看起来像这样(我简化了这个问题):
c
extern void foo(void);
void main()
{
foo();
foo();
}
foo.c
static int g = 0;
int g1 = 0;
void foo()
{
printf("%dn", g);
g = 123;
printf("%dn", g);
printf("%dn", g1);
g1 = 123;
printf("%dn", g1);
}
结果是:
0
123
0
123
123
123
123
123
我的问题是:
是否有任何方法,每次我在foo.c
调用函数,一个新的全局变量将被初始化?正确的输出应该是:
0
123
0
123
0
123
0
123
我不熟悉C,然而,我被要求制作一个源代码翻译工具到C代码,有人设计了如何实现这个工具,把这个奇怪的问题留给了我。
谁能给我一些帮助?重新初始化foo
开头的变量:
void foo()
{
g = 0;
g1 = 0;
printf("%dn", g);
g = 123;
printf("%dn", g);
printf("%dn", g1);
g1 = 123;
printf("%dn", g1);
}
这样,每次调用foo
时,g
和g1
被设置为0(然后foo
将它们设置为其他值)。
在函数调用之间重新初始化
void main()
{
foo();
g = 0;
g1 = 0;
foo();
}
注意应该是int main(void)