Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Как ограничить зону видимости глобальной переменной в многофайловой программе

#c


Нужно, что бы var не был виден в main, но виделся и использовался в других файлах.

Когда было сделано как ниже - работало.

MAIN.c
#include Header.h
foo1();

Header.h
void foo1(void);
void foo2(void);
void foo3(void);

Variables.h
static int var;

Source.c
#include Header.h
#include Variables.h
foo1(){var++;}
foo2(){var++;}
foo3(){var++;}


После изменения как ниже - перестало, при каждом вызове функции var == 0, а вне не
определен.

MAIN.c
#include Header.h
foo1();

Header.h
void foo1(void);
void foo2(void);
void foo3(void);

Variables.h
static int var;

Source1.c
#include Header.h
#include Variables.h
foo1(){var++;}

Source2.c
#include Header.h
#include Variables.h
foo2(){var++;}

Source3.c
#include Header.h
#include Variables.h
foo3(){var++;}

    


Ответы

Ответ 1



А какой смысл в вашем пожелании? Вы хотите использовать в main() свою переменную с именем var или что? Просто смысл глобальной переменной именно в этом - быть видимой везде, во всех файлах. Так что поясните, что именно вы хотите, а то пока что требования у вас противоречивые... Может, можно было бы использовать статическую переменную в функции - например, Variables.h int* getVar(); Variables.c int* getVar() { static int var; return &var; } SourceN.c #include "Header.h" #include "Variables.h" void fooN(){ (*getVar())++; } Но чтобы понять, подходит ли вам это решение - нужно понимать, что вы хотите. Глобальные переменные вообще лучше не использовать... И еще - по первому варианту у вас в main() своя переменная var, в Source - своя. Как и во втором - в каждом файле - своя переменная. Это - не глобальная переменная, она просто видна везде на уровне файла, но в каждом файле она своя.

Комментариев нет:

Отправить комментарий