Почему я должен использовать extern для объявления функции в C?

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

void foo ();   

а также

extern void foo();

person username_4567    schedule 14.07.2015    source источник
comment
Обратите внимание, что ни одно из объявлений не является прототипом (в C). Оба объявляют функцию, которая принимает неопределенный (но фиксированный) список аргументов, возможно, включая нулевые аргументы. Однако это не функция «список аргументов переменной длины» (varargs) - она ​​не похожа на printf() et al. В C ++ все по-другому; там объявлено, что функция не принимает параметров.   -  person Jonathan Leffler    schedule 14.07.2015
comment
Нет абсолютно никакого смысла и причин использовать extern в объявлениях функций. Это какая-то архаичная унаследованная привычка, которая сегодня не имеет абсолютно никакой ценности.   -  person AnT    schedule 14.07.2015


Ответы (1)


есть ли разница между следующими двумя?

В основном нет.

Каждое объявление функции по умолчанию равно extern (т. Е. При отсутствии какого-либо конкретного спецификатора класса хранения).

Цитата C11, глава §6.2.2, Связи идентификаторов

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

person Sourav Ghosh    schedule 14.07.2015