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