2016-03-28 2 views
1

У меня проблема со статической переменной.об инициализации статической переменной и области действия

Я попытался сделать лабиринтную программу, используя стек.

Сначала он активируется, когда я помещаю все коды в один и тот же исходный файл.

Но после того, как я разделил основной на main.c источник и другие функции на function.c, произошла ошибка при статической переменной.

Это часть кода в файле function.c, который вызывает проблему.

Я использовал EXIT_ROW и EXIT_COL как статическую переменную, и эти инициализированы при основной функции. И я использую EXIT_ROW и EXIT_COLS в других function.c файле но когда я отладка этого файла, EXIT_ROW и EXIT_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(); 
} 

Я не мог понять, почему это произошло .. EXIT_ROW и EXIT_COLS объявлены в заголовочном файле stack.h. может помочь мне, почему это произошло, и как я могу это исправить?

+1

Пожалуйста, напишите [минимальный полный и проверяемый пример] (http://stackoverflow.com/help/mcve). В частности, поскольку вы спрашиваете о 'EXIT_ROW' и' EXIT_COLS', вам нужно точно указать *, как и где это определено. Но если они действительно объявлены глобальными «статическими», то, конечно, их можно получить только в каждом файле. Это то, что делает ключевое слово 'static'. Таким образом, на самом деле у вас будет две независимые версии каждой из этих переменных - одна для каждого файла. – kaylum

+0

Благодарим вас за ответ. так, вы имеете в виду, что статический только в том же файле sorce мог бы получить доступ к статическому ключевому слову? не в тех же проектах? – ppappiya

+1

Да. 'static' может означать две вещи: на« глобальном уровне »она говорит« только быть известна в этой единице компиляции »(ваш случай, видимо. Мы могли бы сказать определенно, если бы вы указали определение переменной и где оно находится. – tofro

ответ

1

Я могу предположить, что вы определили переменные с внутренней связью и с файловыми областями. Поэтому каждая единица перевода имеет свой набор этих переменных.

Любая инициализация этих переменных в одной единицы перевода не влияет на переменные в другой единицы перевода.

Удалить объявление static в объявлении переменных. Объявите их в каком-либо заголовке с ключевым словом extern и определите их только в одной единицы перевода.

Смежные вопросы