У меня очень неоднозначное представление о том, что происходит, когда я компилирую много файлов — в основном, когда речь идет о видимости вещей из одного файла в другой. Из того, что я прочитал, static
ограничивает область действия переменной или функции самим файлом. extern
делает наоборот. Исходя из этого, я ожидаю, что смогу просто прочитать глобальный внешний вид из любого файла. На практике это не работает, как показано ниже.
main.c:
#include <stdio.h>
int main(void){
printf("%d\n", b); // b is extern global
return 0;
}
a.c:
static int a = 40;
до н.э.:
extern int b = 20;
Я даже не могу скомпилировать:
> gcc main.c a.c b.c -o test
b.c:1:12: warning: ‘b’ initialized and declared ‘extern’ [enabled by default]
extern int b = 20;
^
main.c: In function ‘main’:
main.c:4:20: error: ‘b’ undeclared (first use in this function)
printf("%d\n", b); // b is extern global