Абстрактные деклараторы в C

Абстрактный декларатор — это декларатор без идентификатора, состоящий из одного или нескольких указателей, массивов или модификаторов функций. Модификатор указателя (*) всегда предшествует идентификатору в деклараторе, а за идентификатором следуют модификаторы массива ([ ]) и функций (( )). Зная это, можно определить, появится ли идентификатор в абстрактном деклараторе, и интерпретировать декларатор соответствующим образом. В статье Интерпретация сложных деклараторов содержатся дополнительные сведения и примеры сложных деклараторов. Обычно для упрощения деклараторов можно использовать typedef. См. статью Объявления Typedef.

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

В следующих примерах показаны абстрактные деклараторы.

int *         // The type name for a pointer to type int:

int *[3]      // An array of three pointers to int

int (*) [5]   // A pointer to an array of five int

int *()       // A function with no parameter specification
              // returning a pointer to int

// A pointer to a function taking no arguments and
// returning an int

int (*) ( void )

// An array of an unspecified number of constant pointers to
// functions each with one parameter that has type unsigned int
// and an unspecified number of other parameters returning an int

int (*const []) ( unsigned int, ... )

Примечание

Абстрактный декларатор не может состоять из набора пустых скобок, ( ) , поскольку такая запись является неоднозначной. Невозможно определить, принадлежит ли неявный идентификатор области внутри скобок (и является в этом случае неизмененным типом) или перед скобками (и является в этом случае типом функции).

См. также

Деклараторы и объявления переменных