测试在32位Linux x86上,我使用gcc 4.6.3
。
我有两个c source files
,main.c
和foo.c
,它看起来像这样(我简化了这个问题):
的main.c
extern void foo(void);
void main()
{
foo();
foo();
}
foo.c的
static int g = 0;
int g1 = 0;
void foo()
{
printf("%d\n", g);
g = 123;
printf("%d\n", g);
printf("%d\n", g1);
g1 = 123;
printf("%d\n", g1);
}
结果是:
0
123
0
123
123
123
123
123
所以我的问题是:
有没有办法,每当我在foo.c
调用函数时,新的全局变量都会被初始化?正确的输出是:
0
123
0
123
0
123
0
123
我不熟悉C,但是,我被要求为C代码制作一个源代码翻译工具,有人设计了如何以某种方式实现该工具,给我留下这个奇怪的问题..
有人能给我一些帮助吗? THX!
答案 0 :(得分:3)
在foo
:
void foo()
{
g = 0;
g1 = 0;
printf("%d\n", g);
g = 123;
printf("%d\n", g);
printf("%d\n", g1);
g1 = 123;
printf("%d\n", g1);
}
这样,g
和g1
每次调用foo
时都会设置为0(然后foo
将它们设置为其他值)。
答案 1 :(得分:-1)
在函数调用之间重新初始化
void main()
{
foo();
g = 0;
g1 = 0;
foo();
}
请注意,它应为int main(void)