2011-02-04 4 views

ответ

11

Да, ваше предположение верно. Он объявляет о существовании функции abc(), поэтому на нее можно ссылаться в пределах xyz(). Обратите внимание, что extern не требуется, поскольку по умолчанию функции extern.

+3

Я бы не стал называть extern ненужным. Можно сказать, что писать extern перед прототипом является более правильным грамматическим, вместо того, чтобы иметь его там неявно. Лично я всегда пишу extern перед прототипами, потому что это дает мне привычку всегда писать что-то перед ними. Таким образом, я не забуду написать статику перед функциями, которые должны быть конфиденциально инкапсулированы. – Lundin

+4

@ Lundin: Вы пишете 'auto' перед всеми локальными переменными? –

+0

, но зачем объявлять о существовании внутри функции, а не непосредственно в файле (например, перед определением каждой функции). Или это может вызвать ссылку на определенный момент, а не во время компиляции? – binaryguy

2

Декларация «extern» в C означает указание наличия и типа глобальной переменной или функции.

Внешний вид - это то, что определено снаружи для текущего модуля.

Также не редко можно найти прототипы функций, объявленные как внешние.

Вам это нужно, только если это не значение по умолчанию и/или где вы хотите указать ссылку «C».

0

Да, ваше утверждение верно ..... когда мы используем extern func_name w, объявляем имя func_name.

0

Я бы просто добавил, что эта конструкция, по моему опыту, необычна в современном коде, но часто встречается в более старом коде, особенно «K R» C код.

Более современный код обычно получает прототип функции из файла заголовка.

2

Этот способ декларации имеет одно большое преимущество:

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

Я также склонен делать это для внешних глобальных переменных - преимущество приходит позже при сохранении и, в конечном счете, реструктуризации/минимизации зависимостей.

Последнее примечание к теме «Запись внешнего/не внешнего»: Если его просто объявление вперед (-> функция определено в конце того же файла), я бы не рекомендовал использовать внешний - потому что это просто не так. В противном случае внешний смысл имеет смысл указывать, что определение должно быть найдено где-то в другом месте (или для libaries: возможно, должно быть реализовано пользователями этой библиотеки).

Надеюсь, что это поможет (как шаг к более объективному направлению программирования .. :))

Смежные вопросы