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_CHAR_KIND |
TRIM |
SELECTED_INT_KIND |
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).
-1 + 3 |
|
SIZE(B) |
! B is a named constant |
7_2 |
|
INT(J, 4) |
! J is a named constant |
SELECTED_INT_KIND (2) |
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. |