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


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

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

Синтаксис

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

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

function-definition:
declaration-specifiers выбиратьattribute-seqвыбиратьdeclaratordeclaration-listвыбиратьcompound-statement

/* attribute-seq — это microsoft-specific */

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

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-list выбирать) /* Устаревший декларатор */

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

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-specifierregister.declaration-list В type-specifier синтаксисе declaration-specifiers можно исключить только в том случае, если register для значения int типа указан класс хранилища.

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

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

См. также

Функции