Файлы ac и bc не компилируются независимо друг от друга. Вы включаете bc в ac. То, что компилятор видит после предварительной обработки для ac, выглядит следующим образом:
// contents of stdio.h
static char B_VAR[] = "Hello world!\n";
int main()
{
printf("%s", B_VAR);
return 0;
}
Так что же на самом деле делает static
переменную / функцию локальной для компиляцииЕдиница, в которой находится , может состоять из одного или нескольких исходных файлов, которые включены вместе.
Если бы вы удалили include и скомпилировали два файла по отдельности, то вы бы увидели ошибку.