Declaradores abstratos C
Um declarador abstrato é um declarador sem um identificador, consistindo em um ou mais modificadores de ponteiro, matriz ou função. O modificador de ponteiro (*
) sempre precede o identificador em um declarador; os modificadores de matriz ([ ]) e de função ( ( ) ) seguem o identificador. Sabendo disso, você pode determinar onde o identificador apareceria em um declarador abstrato e interpretar o declarador corretamente. Consulte Interpretar declaradores mais complexos para obter mais informações e exemplos de declaradores complexos. Geralmente, typedef
pode ser usado para simplificar declaradores. Consulte Declarações de Typedef.
Os declaradores abstratos podem ser complexos. Os parênteses em um declarador abstrato complexo especificam uma determinada interpretação, como fazem no caso dos declaradores complexos em declarações.
Estes exemplos ilustram declaradores abstratos:
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, ... )
Observação
O declarador abstrato que consiste em um conjunto de parênteses vazios, ( ), não é permitido porque é ambíguo. É impossível determinar se o lugar do identificador implícito é dentro dos parênteses (nesse caso, ele é um tipo não modificado) ou antes dos parênteses (nesse caso, ele é um tipo de função).