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


Синтаксис объявления функций

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

[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] declarator [cv-qualifer] 
[exception-spec]
[friend] [storage-class-specifier] [function-specifier]
[[cv-qualifer] type-specifier] [*|&] [ms-modifer] identifier 
( argument-list ) [cv-qualifer] [exception-spec]
  1. Спецификатор объявления. См. раздел Спецификаторы.

    • В классе — необязательный спецификатор friend.

    • Необязательный спецификатор класса хранения. Для глобальных функций допустимыми спецификаторами класса хранения являются static и extern. Для функций-членов класса спецификатор extern не допускается.

    • Необязательный спецификатор функции. Для глобальных функций единственным допустимым спецификатором функции является inline. Для функций-членов класса допускаются спецификаторы virtual и inline, а для конструкторов — explicit.

    • Спецификатор типа, указывающий тип возвращаемого значения (может меняться на тип указателя или ссылки при помощи символов * или &).

  2. Декларатор.

    • Необязательные операторы указателя или ссылочные операторы, изменяющие тип возвращаемого значения.

    • Необязательный модификатор, используемый в системах Microsoft, указывающий соглашение о вызовах. См. раздел Модификаторы, используемые в системах Microsoft.

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

    • Список объявлений аргументов, заключенный в скобки ().

    • Необязательный квалификатор const или volatile. В этом контексте квалификатор const может использоваться только для членов класса и указывает на то, что функция не будет изменять данные-члены класса.

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

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

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

В следующем примере показаны два простых объявления функции:

char *strchr( char *dest, char *src );
static int atoi( const char *ascnum ) const;

Объявление функций, возвращающих указатели на функции

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

typedef int (*fp)(int);
fp myFunction(char* s); // function returning function pointer

Если оно не используется, то правильный синтаксис объявления функции можно вывести из синтаксиса декларатора для указателя на функцию, заменив идентификатор (в приведенном выше примере — fp) на имя функции и список аргументов, как показано выше:

int (*myFunction(char* s))(int);

Это объявление эквивалентно объявлению при помощи ключевого слова typedef, которое приводилось выше.

См. также

Ссылки

Объявления функций