INTEGER

Purpose

An INTEGER type declaration statement specifies the length and attributes of objects and functions of type integer. Initial values can be assigned to objects.

Syntax

Read syntax diagramSkip visual syntax diagram
>>-INTEGER--+---------------+--+-----------------------+-------->
            '-kind_selector-'  +-::--------------------+   
                               '-,--attr_spec_list--::-'   

>--entity_decl_list--------------------------------------------><

where:

attr_spec
is any of the following:
ALLOCATABLE  1  INTRINSIC PUBLIC
ASYNCHRONOUS OPTIONAL SAVE
AUTOMATIC  2  PARAMETER STATIC  2 
BIND  1  POINTER TARGET
DIMENSION (array_spec) PRIVATE VALUE  1 
EXTERNAL PROTECTED  1  VOLATILE
INTENT (intent_spec)    
Note:
  •  1  Fortran 2003
  •  2  IBM extension
kind_selector
Read syntax diagramSkip visual syntax diagram
>>-+-(--+-----------+--int_constant_expr--)-+------------------><
   |    '-KIND-- = -'                       |   
   |                           (1)          |   
   '- * --int_literal_constant--------------'   

Notes:
  1. IBM extension.
 
specifies the length of integer entities: 1, 2, 4 or 8. int_literal_constant cannot specify a kind type parameter.
attr_spec
For detailed information on rules about a particular attribute, refer to the statement of the same name.
intent_spec
is either IN, OUT, or INOUT
::
is the double colon separator. Use the double colon separator when you specify attributes, =constant_expr, or => NULL().
array_spec
is a list of dimension bounds
entity_decl
Read syntax diagramSkip visual syntax diagram
>>-a--+-+------------------+--+------------------+-+------------>
      | |     (1)      (2) |  '-(--array_spec--)-' |   
      | '- * ------len-----'                       |   
      |                       (3)      (4)         |   
      '-(--array_spec--)-- * ------len-------------'   

>--+----------------------------------+------------------------><
   |                            (5)   |   
   '-+-/--initial_value_list--/-----+-'   
     +- = --constant_expr-----------+     
     '- => --NULL()-----------------'     

Notes:
  1. IBM extension.
  2. IBM extension.
  3. IBM extension.
  4. IBM extension.
  5. IBM extension.
 
a
is an object name or function name. array_spec cannot be specified for a function name with an implicit interface.
len
overrides the length as specified in kind_selector, and cannot specify a kind type parameter. The entity length must be an integer literal constant that represents one of the permissible length specifications.
initial_value
provides an initial value for the entity specified by the immediately preceding name
constant_expr
provides a constant expression for the entity specified by the immediately preceding name
=> NULL()
provides the initial value for the pointer object

Rules

Within the context of a derived type definition:
  • If => appears in a component initialization, the POINTER attribute must appear in the attr_spec_list.
  • If = appears in a component initialization, the POINTER attribute cannot appear in the component attr_spec_list.
  • The compiler will evaluate constant_expr within the scoping unit of the type definition.

If => appears for a variable, the object must have the POINTER attribute.

If constant_expr appears for a variable, the object cannot have the POINTER attribute.

Entities in type declaration statements are constrained by the rules of any attributes specified for the entities, as detailed in the corresponding attribute statements.

The type declaration statement overrides the implicit type rules in effect. You can use a type declaration statement that confirms the type of an intrinsic function. The appearance of a generic or specific intrinsic function name in a type declaration statement does not cause the name to lose its intrinsic property.

An object cannot be initialized in a type declaration statement if it is a dummy argument, an allocatable object, a pointer, a function result, an object in blank common, an integer pointer, an external name, an intrinsic name, or an automatic object. Nor can an object be initialized if it has the AUTOMATIC attribute. The object may be initialized if it appears in a named common block in a block data program unit IBM extension begins or if it appears in a named common block in a module or submodule. IBM extension ends

You can initialize pointers using => NULL().

The specification expression of an array_spec can be a nonconstant expression if the specification expression appears in an interface body or in the specification part of a subprogram. Any object being declared that uses this nonconstant expression and is not a dummy argument or a pointee is called an automatic object.

An attribute cannot be repeated in a given type declaration statement, nor can an entity be explicitly given the same attribute more than once in a scoping unit.

constant_expr must be specified if the statement contains the PARAMETER attribute. If the entity you are declaring is a variable, and constant_expr or NULL() is specified, the variable is initially defined.

If the entity you are declaring is a derived type component, and constant_expr or NULL() is specified, the derived type has default initialization.

a becomes defined with the value determined by constant_expr, in accordance with the rules for intrinsic assignment. If the entity is an array, its shape must be specified either in the type declaration statement or in a previous specification statement in the same scoping unit. A variable or variable subobject cannot be initialized more than once. If a is a variable, the presence of constant_expr or NULL() implies that a is a saved object, except for an object in a named common block. The initialization of an object could affect the fundamental storage class of an object.

An array_spec specified in the entity_decl takes precedence over the array_spec in the DIMENSION attribute.

An array function result that does not have the ALLOCATABLE or POINTER attribute must have an explicit-shape array specification.

If the entity declared is a function, it must not have an accessible explicit interface unless it is an intrinsic function.

If T or F, defined previously as the name of a constant, appears in a type declaration statement, it is no longer an abbreviated logical constant but the name of the named constant.

Examples

MODULE INT
  INTEGER, DIMENSION(3) :: A,B,C
  INTEGER :: X=234,Y=678
END MODULE INT

Related information



Voice your opinion on getting help information Ask IBM compiler experts a technical question in the IBM XL compilers forum Reach out to us