A type may be initialized to a value of expression when it is declared, like a variable, as in:
program TypeVarInitDemo; type Int10 = Integer value 10; FooType = Real; MyType = Char value Pred ('A'); EType = (a, b, c, d, e, f, g) value d; const Answer = 42; var ii : Int10; { Value of ii set to 10 } ch : MyType value Pred ('z'); aa : Integer value Answer + 10; foo: FooType value Sqr (Answer); e1 : EType; { value set to d } e2 : EType value g; { value set to g } begin end.
Extended Pascal requires the type initializers to be constant expressions. GPC allows any valid expression.
Note, however, that the expressions that affect the size of storage allocated for objects (e.g. the length of arrays) may contain variables only inside functions or procedures.
GPC evaluates the initial values used for the type when an identifier is declared for that type. If a variable is declared with a type-denoter that uses a type-name which already has an initial value the latter initialization has precedence.
@@ GPC does not know how to calculate constant values for math functions in the runtime library at compile time, e.g. Exp (Sin (2.4567)), so you should not use these kind of expressions in object size expressions. (Extended Pascal allows this.)