Deklaratory abstrakcyjne języka C
Deklarator abstrakcyjny jest deklaratorem bez identyfikatora składającego się z co najmniej jednego wskaźnika, tablicy lub modyfikatorów funkcji. Modyfikator wskaźnika (*
) zawsze poprzedza identyfikator w deklaratorze; tablica ([ ]) i modyfikatory funkcji ( ) są zgodne z identyfikatorem. Wiedząc o tym, można określić, gdzie identyfikator będzie wyświetlany w abstrakcyjnym deklaratorze i odpowiednio zinterpretować deklarator. Aby uzyskać dodatkowe informacje i przykłady złożonych deklaratorów, zobacz Interpretowanie bardziej złożonych deklaratorów. Ogólnie rzecz biorąc typedef
, można użyć do uproszczenia deklaratorów. Zobacz Deklaracje typedef.
Deklaratory abstrakcyjne mogą być złożone. Nawiasy w złożonym deklaratorze abstrakcyjnym określają konkretną interpretację, podobnie jak w przypadku deklaratorów złożonych w deklaracjach.
Te przykłady ilustrują deklaratory abstrakcyjne:
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, ... )
Uwaga
Deklarator abstrakcyjny składający się z zestawu pustych nawiasów ( ), jest niedozwolony, ponieważ jest niejednoznaczny. Nie można określić, czy identyfikator domniemany należy do nawiasów (w tym przypadku jest to niezmodyfikowany typ) lub przed nawiasami (w tym przypadku jest to typ funkcji).