K&R говорит:
внешними переменными по умолчанию и функциями имеют свойство, что все ссылки на них тем же именем, даже от функций, скомпилированных отдельно, являются ссылками на то же самое
Объясните, что это означает, я не понимаю это
внешние переменные и функции являются глобальными, т.е. содержат одни и те же значения (для переменных) или определения (для функций) даже при вызове из разных файлов * .c в вашей программе.
Рассмотрим две функции:
extern int extern_sqr(int i) { return i * i; }
static int static_dbl(int i) { return i * 2; }
Тогда люди, ссылающиеся на extern_sqr
, будут ссылаться на эту функцию. Это противоположно static
связыванию, когда только люди из "единицы трансляции" (примерно файла, в котором она определена) могут обращаться к функции static_dbl
.
Оказывается, что extern
подразумевается по умолчанию в Си. Поэтому вы получите такое же поведение, если напишете:
int extern_sqr(int i) { return i * i; }
Более новые стандарты Си все еще требуют "объявления функции", поэтому обычно в заголовочном файле вы встретите:
int extern_sqr(int i); // Note: 'i' is optional
Что говорит: "Где-то, в какой-то другой единице трансляции, у меня есть функция под названием extern_sqr
".
Та же логика применима к переменным.