关于静态变量初始化和范围

时间:2016-03-28 11:07:50

标签: c

我对静态变量有疑问。

我尝试使用堆栈制作迷宫程序。

首先,当我将所有代码放在同一个源文件中时,它会激活。

但是,在将main与main.c源以及其他函数分隔为function.c之后,静态变量发生了错误。

这是问题发生在function.c文件中的代码的一部分。

我使用EXIT_ROWEXIT_COL作为静态变量,以及这些变量 在main函数初始化。 我在其他EXIT_ROW文件中使用EXIT_COLSfunction.c 但是当我调试此文件时,EXIT_ROWEXIT_CO L根本没有初始化。

void main()
{
    int xsize, ysize;
    FILE *fp;
    if( !( fp = fopen("input.txt", "r") ) )
    {
        fprintf(stderr, "FILE couldn't open\n");
        exit(EXIT_FAILURE);     

    };

    fscanf(fp, "%d %d", &ysize, &xsize);
    EXIT_ROW = ysize;
    EXIT_COL = xsize;
    printf("%d %d\n", ysize, xsize);

    init_maze(xsize, ysize, fp);

    print_maze(xsize, ysize);

    path();
}

我无法理解为什么会这样。 EXT_ROW和EXIT_COLS在stack.h头文件中声明。 你可以帮助我为什么会发生这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:1)

我可以假设您使用内部链接和文件范围定义了变量。因此,每个翻译单元都有自己的这些变量。

在一个翻译单元中对这些变量进行的任何初始化都不会影响其他翻译单元中的变量。

在变量声明中删除关键字static。使用关键字extern在某个标头中声明它们,并仅在一个翻译单元中定义它们。