Почему main не объявлен как extern - PullRequest
3 голосов
/ 19 сентября 2011

Когда мы хотим использовать функцию, скажем void foo(void) в File1.c в моем Main.c [где моя основная функция] - почему мне не нужно писать:

extern int main(void);

In File1.c?

Предполагается, что File1.c и Main.c находятся в одном TU.

Ответы [ 3 ]

6 голосов
/ 19 сентября 2011

Вам никогда не нужно писать extern с объявлениями функций.Функции имеют внешнюю связь по умолчанию.В более старом коде наблюдается странная необъяснимая привычка: добавлять extern ко всем объявлениям внешних функций.(Вероятно, именно это и привело к вашему вопросу о main.) На самом деле, это совершенно не нужно, не имеет смысла и только загромождает код.

Вы, безусловно, можете объявить main с помощью extern,если ты так хочешь.Но это совершенно излишне.

5 голосов
/ 19 сентября 2011

Для начала, функции extern по умолчанию.

Кроме того, main является "особенным";компоновщик трактует это по-другому.

2 голосов
/ 19 сентября 2011

Поскольку во всей части исполняемого файла должен быть только один main, который служит отправной точкой выполнения. Нет необходимости для каждой единицы перевода иметь связь с main.

Цитата из стандарта C ++ (я полагаю, что это будет то же самое для C) -

ИСО / МЭК 14882: 2003 (E) 3.6.1

3 [...] Связь (3.5) основного реализации. [...]

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