Имам много смесена представа какво се случва, когато компилирам много файлове - най-вече когато става въпрос за видимостта на нещата от един файл в друг. От това, което прочетох, static
ограничава обхвата на променлива или функция до самия файл. extern
прави обратното. От това бих очаквал да мога и просто да чета глобален 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;
b.c:
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