Поделиться через


Определения функций в C

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

Синтаксис

translation-unit:
external-declaration
translation-unit external-declaration

external-declaration: /* Разрешено только во внешней области (файла) */
function-definition
declaration

function-definition:
declaration-specifiersнеоб. attribute-seqнеоб. declarator declaration-listнеоб. compound-statement

/* attribute-seq используется только в системах Майкрософт */

Параметры прототипа:

declaration-specifiers:
storage-class-specifier declaration-specifiersнеоб.
type-specifier declaration-specifiersнеоб.
type-qualifier declaration-specifiersнеоб.

declaration-list:
declaration
declaration-list declaration

declarator:
pointerнеоб. direct-declarator

direct-declarator: /* Оператор объявления функции */
direct-declarator ( parameter-type-list ) /* Декларатор нового стиля */
direct-declarator ( identifier-listopt ) /* Устаревший декларатор */

Для списка параметров в определении используется следующий синтаксис:

parameter-type-list: /* Список параметров */
parameter-list
parameter-list , ...

parameter-list:
parameter-declaration
parameter-list , parameter-declaration

parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declaratorнеоб.

В определении функции устаревшего стиле для списка параметров используется следующий синтаксис:

identifier-list: /* Используется в определениях и объявлениях функций устаревшего стиля */
identifier
identifier-list , identifier

Синтаксис тела функции:

compound-statement:
{ declaration-listнеоб. statement-listнеоб. }

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

Необязательный declaration-specifiers и обязательный declarator вместе указывают возвращаемый тип и имя функции. Декларатор declarator представляет собой сочетание идентификатора, задающего имя функции, и круглых скобок после имени функции. Необязательный attribute-seq нетерминальный — это функция, определенная корпорацией Майкрософт в атрибутах функций.

( direct-declarator в синтаксисе declarator ) указывает имя определяемой функции и идентификаторы его параметров. Если он direct-declarator содержит parameter-type-list, список указывает типы всех параметров. Такой декларатор также является прототипом функции для ее последующих вызовов.

В declaration определениях функций не может содержаться другое storage-class-specifier register.declaration-list В type-specifier синтаксисе declaration-specifiers можно исключить только в том случае, если register для значения int типа указан класс хранилища.

Это compound-statement тело функции, содержащее объявления локальных переменных, ссылки на внешние объявленные элементы и инструкции.

Компоненты определения функции подробно рассматриваются в статьях Атрибуты функций, Класс хранения, Тип возвращаемого значения, Параметры и Текст функции.

См. также

Функции