Lugaru's Epsilon
Programmer's
Editor

Context:
Epsilon User's Manual and Reference
   Epsilon Extension Language
      . . .
      Scope of Variables
      Data Types
         . . .
         Complex Declarators
         Typedefs
         Type Names
      Initialization
      . . .

Previous   Up    Next
Typedefs  Epsilon Extension Language   Initialization


Epsilon User's Manual and Reference > Epsilon Extension Language > Data Types >

Type Names

EEL's sizeof operator and its casting operator specify particular types using type names. A type name looks like a declaration of a single variable, except that the variable name is missing (as is the semicolon at the end). For example, int * is a type name referring to a pointer to an int.

type-name:
        type-specifier abstract-declarator

abstract-declarator:
        empty
        ( abstract-declarator )
        * abstract-declarator
        abstract-declarator [ constant-expression ]
        abstract-declarator [ ]
        abstract-declarator ( )
        abstract-declarator ( ansi-argument-list )

Note that you could interpret a type name like int *() in two ways: either as a function returning a pointer to an int (like int *foo();) or as a pointer to an int (like int *(foo);). EEL rules out the latter by requiring that a parenthesized abstract-declarator be nonempty. Given this, the system is not ambiguous, and an identifier can appear in only one place in each type name to make a legal declaration.

The same precedence rules apply to type names as to normal declarators (or to expressions). For example, the type name char *[10] refers to an array of 10 pointers to characters, but char (*)[10] refers to a pointer to an array of 10 characters.



Previous   Up    Next
Typedefs  Epsilon Extension Language   Initialization


Lugaru Copyright (C) 1984, 2020 by Lugaru Software Ltd. All rights reserved.