Как я могу получить доступ к статической переменной из другого файла?
Как я могу получить доступ к статической переменной из другого файла? Разве статическая переменная не имеет области видимости файла?
bash-3.2$ ls
a.c b.c
bash-3.2$ cat a.c
#include <stdio.h>
static int s = 100;
int fn()
{
/* some code */
}
bash-3.2$ cat b.c
#include <stdio.h>
#include "a.c"
extern int s;
int main()
{
printf("s = %d \n",s);
return 0;
}
bash-3.2$ gcc b.c
bash-3.2$ a.exe
s = 100
2 ответа
Вы включили один файл в другой - очень плохая практика. С точки зрения компилятора C, оба файла образуют одну единицу перевода, поскольку препроцессор C вставляет содержимое a.c
в b.c
,
В случае двух отдельных блоков перевода, один блок не может получить доступ static
с другой, но это не ваш случай.
Если вы удалите #include "a.c"
и компилируем так, как должно быть: gcc a.c b.c
, ты получишь unresolved external
ошибка для s
,
Это из отдельного файла, но вы печатаете не из отдельного блока перевода, как вы #include
весь a.c
от b.c
,
static
объекты являются локальными для единицы перевода, которая состоит из всех включенных файлов, а не для одного исходного файла.