A specification expression is a restricted expression that is of type integer and has a scalar value. This type of expression appears only in the declaration of array bounds and character lengths.
In a restricted expression, each operation is intrinsic and each operand is one of the following:
| BIT_SIZE | NWORKERS | 
| DIGITS | PRECISION | 
| EPSILON | PROCESSORS_SHAPE | 
| HUGE | RADIX | 
| ILEN | RANGE | 
| KIND | SHAPE | 
| LBOUND | SIZE | 
| LEN | SIZEOF | 
| MAXEXPONENT | TINY | 
| MINEXPONENT | UBOUND | 
| NUMBER_OF_PROCESSORS | 
Each function argument must be one of the following:
Each subscript, section subscript, and substring starting and ending point must be a restricted expression.
Specification functions can be used in specification expressions to indicate the attributes of data objects. A specification function is a pure function. It cannot have a dummy procedure argument or be any of the following:
A variable in a specification expression must have its type and type parameters (if any) specified in one of the following ways:
If a variable in a specification expression is typed by the implicit typing rules, its appearance in any subsequent type declaration statement must confirm the implied type and type parameters.
If a specification 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).
In a specification expression, the number of arguments for a function reference is limited to 255.
Examples
The following shows valid specification expressions:
MAX(I) + J          ! I and J are scalar integer variables
UBOUND(ARRAY_B,20)  ! ARRAY_B is an assumed-shape dummy array
For More Information: