Стандарт C - Является ли определение функции прототипом функции? - PullRequest
3 голосов
/ 01 февраля 2011

Стандарт (последняя версия: WG14 / N1256) гласит (6.2.1 §2):

Прототип функции - это объявление функции, которая объявляет типы ее параметров.

В непосредственной близости от этого утверждения мы также находим свидетельство того, что объявление идентификатора состоит из объявления или спецификатора типа (§4):

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

Таким образом, может показаться, что знание, является ли определение функции прототипом функции, сводится к знанию, является ли определение функции декларатором. Это 1013 *

Мне нужен проверенный ответ, который соответствует стандарту C. Меня не волнует обычное значение или то, что говорит Википедия или ваша любимая книга на Си.

Вот утверждение в стандарте, которое привело меня к мысли, что определения функций действительно могут быть прототипами функций (§4):

Если декларатор или спецификатор типа, который объявляет идентификатор, появляется в списке объявлений параметров в прототипе функции (не является частью функции определение), ...

1 Ответ

6 голосов
/ 01 февраля 2011

Да, см. 6.9.1 об определениях функций, параграф 7:

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

...