Внешняя связь в C

K&R говорит:

внешними переменными по умолчанию и функциями имеют свойство, что все ссылки на них тем же именем, даже от функций, скомпилированных отдельно, являются ссылками на то же самое

Объясните, что это означает, я не понимаю это

5
задан Michael Mrozek 22 June 2010 в 13:36
поделиться

2 ответа

внешние переменные и функции являются глобальными, т.е. содержат одни и те же значения (для переменных) или определения (для функций) даже при вызове из разных файлов * .c в вашей программе.

0
ответ дан 14 December 2019 в 18:58
поделиться

Рассмотрим две функции:

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".

Та же логика применима к переменным.

5
ответ дан 14 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: