### 4.1.7.1 Initialization Expressions

An initialization expression must evaluate at compile time to a constant. It is used to specify an initial value for an entity.

In an initialization expression, each operation is intrinsic and each operand is one of the following:

- A constant or subobject of a constant
- An array constructor where each element and the bounds and strides of each implied-do, are expressions whose primaries are initialization expressions
- A structure constructor whose components are initialization expressions
- An elemental intrinsic function reference of type integer or character, whose arguments are initialization expressions of type integer or character
- A reference to one of the following inquiry functions:

  BIT_SIZE | MINEXPONENT
  DIGITS | PRECISION
  EPSILON | RADIX
  HUGE | RANGE
  ILEN | SHAPE
  KIND | SIZE
  LBOUND | TINY
  LEN | UBOUND
  MAXEXPONENT |

  Each function argument must be one of the following:

  - An initialization expression
  - A variable whose kind type parameter and bounds are not assumed or defined by an ALLOCATE statement, pointer assignment, or an expression that is not an initialization expression
- A reference to one of the following transformational functions (each argument must be an initialization expression):

  REPEAT | SELECTED_REAL_KIND
  RESHAPE | TRANSFER
  SELECTED_INT_KIND | TRIM

- A reference to the transformational function NULL
- An implied-do variable within an array constructor where the bounds and strides of the corresponding implied-do are initialization expressions
- Another initialization expression enclosed in parentheses

Each subscript, section subscript, and substring starting and ending point must be an initialization expression.

In an initialization expression, the exponential operator (**) must have a power of type integer.

If an initialization expression invokes an inquiry function for a type parameter or an array bound of an object, the type parameter or array bound must be specified in a prior specification statement (or to the left of the inquiry function in the same statement).

Examples

The following examples show valid and invalid initialization (constant) expressions:

Valid |
`-1 + 3` |
`SIZE(B)` | ! B is a named constant
`7_2` |
`INT(J, 4)` | ! J is a named constant
`SELECTED_INT_KIND (2)` |
Invalid | Explanation
`SUM(A)` | Not an allowed function.
`A/4.1 - K**1.2` | Exponential does not have integer power (A and K are named constants).
`HUGE(4.0)` | Argument is not an integer.

For More Information:

- On array constructors, see Section 3.4.2.4.
- On structure constructors, see Section 3.2.4.
- On intrinsic functions, see Chapter 9.

Previous Page Next Page Table of Contents