每当我在C源文件中调用函数时,无论如何都可以创建一个“新的”全局变量吗?

时间:2014-05-26 02:16:47

标签: c

测试在32位Linux x86上,我使用gcc 4.6.3

我有两个c source filesmain.cfoo.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!

2 个答案:

答案 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);
}

这样,gg1每次调用foo时都会设置为0(然后foo将它们设置为其他值)。

答案 1 :(得分:-1)

在函数调用之间重新初始化

void main()
{
    foo();
    g = 0;
    g1 = 0;
    foo();
}

请注意,它应为int main(void)