Внешняя связь в C - PullRequest
       3

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

5 голосов
/ 22 июня 2010

К & Р говорит:

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

Пожалуйста, объясните, что это значит, я не понимаю

Ответы [ 2 ]

5 голосов
/ 22 июня 2010

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

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.

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

0 голосов
/ 22 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...