2011-02-01 5 views
3

стандарт (последняя версия: WG14/N1256) говорит (6.2.1 § 2):C Стандарт. Является ли определение функции прототипом функции?

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

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

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

Так что, похоже, что знание того, является ли определение функции прототипом функции, сводится к пониманию того, является ли определение функции декларатором. Это ?

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

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

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

+0

Обратите внимание, что «объявляет типы своих параметров» означает отличать прототипы функций от K & R-функций старого стиля, которые этого не делали, например. 'int foo (x, y)' vs. 'int foo (int x, int y)'. –

ответ

6

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

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