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

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

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 объекты являются локальными для единицы перевода, которая состоит из всех включенных файлов, а не для одного исходного файла.

Другие вопросы по тегам