# PROGRAM

Statement: Identifies the program unit as a main program and gives it a name.

[PROGRAM name]

[specification-part]

[execution-part]

[CONTAINS

internal-subprogram-part]

END[PROGRAM [name]]

name | Is the name of the program.
specification-part | Is one or more specification statements, except for the following: INTENT (or its equivalent attribute) OPTIONAL (or its equivalent attribute) PUBLIC and PRIVATE (or their equivalent attributes) An automatic object must not appear in a specification statement. If a SAVE statement is specified, it has no effect.
execution-part | Is one or more executable constructs or statements, except for ENTRY or RETURN statements.
internal-subprogram-part | Is one or more internal subprograms (defining internal procedures). The internal-subprogram-part is preceded by a CONTAINS statement.

## Description

The PROGRAM statement is optional. Within a program unit, a PROGRAM statement can be preceded only by comment lines or an OPTIONS statement.

The END statement is the only required part of a program. If a name follows the END statement, it must be the same as the name specified in the PROGRAM statement.

The program name is considered global and must be unique. It cannot be the same as any local name in the main program or the name of any other program unit, external procedure, or common block in the executable program.

A main program must not reference itself (either directly or indirectly).

## Example

The following is an example of a main program:

    PROGRAM TEST
      INTEGER C, D, E(20,20)     ! Specification part
      CALL SUB_1                 ! Executable part
    ...
    CONTAINS
      SUBROUTINE SUB_1           ! Internal subprogram
      ...
      END SUBROUTINE SUB_1
    END PROGRAM TEST

The following shows another example:

     PROGRAM MyProg
     PRINT *, 'hello world'
     END

Parent topic: O to P