next up previous
Next: Initialization Up: Declarations Previous: Declarators

Type names

The standard uses an optional pointer and an optional direct_abs_declarator. These options must be made explicit here in order to avoid a grammar conflict.

Syntactic elements[18]:

type_name:
  specifier_qualifier_list abstract_declarator /
  specifier_qualifier_list .

abstract_declarator:
  pointer_abstract_declarator /
  direct_abstract_declarator .

pointer_abstract_declarator:
  '*' type_qualifier_list_opt abstract_declarator .

direct_abstract_declarator:
  '(' abstract_declarator ')' /
  array_abstract_declarator /
  function_abstract_declarator .

array_abstract_declarator:
  direct_abstract_declarator '[' constant_exp_opt ']' /
  '[' constant_exp_opt ']' .

function_abstract_declarator:
  direct_abstract_declarator '(' empty_parameter_type_list ')' /
  direct_abstract_declarator
    '(' &'Nest[34](`identifier',`0')' parameter_type_list &'Restore[36]' ')' /
  '(' empty_parameter_type_list ')' /
  '(' &'Nest[34](`identifier',`0')' parameter_type_list &'Restore[36]' ')' .

empty_parameter_type_list: .
This macro is defined in definitions 3, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, and 27.
This macro is invoked in definition 6.



2008-08-30