Абстрактные деклараторы в 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, ... )
Примечание.
Абстрактный декларатор не может состоять из набора пустых скобок, ( ), поскольку такая запись является неоднозначной. Невозможно определить, принадлежит ли неявный идентификатор области внутри скобок (и является в этом случае неизмененным типом) или перед скобками (и является в этом случае типом функции).