# 5.10 INTENT Attribute and Statement

The INTENT attribute specifies the intended use of one or more dummy arguments.

The INTENT attribute can be specified in a type declaration statement or an INTENT statement, and takes one of the following forms:

Type Declaration Statement:

  type, [att-ls,] INTENT (intent-spec) [, att-ls] :: d-arg [, d-arg]...

Statement:

  INTENT (intent-spec) [::] d-arg [, d-arg]...
  type
  Is a data type specifier.
  att-ls
  Is an optional list of attribute specifiers.
  intent-spec
  Is one of the following specifiers:
  - IN

    Specifies that the dummy argument will be used only to provide data to the procedure. The dummy argument must not be redefined (or become undefined) during execution of the procedure.

    Any associated actual argument must be an expression.

  - OUT

    Specifies that the dummy argument will be used to pass data from the procedure back to the calling program. The dummy argument is undefined on entry and must be defined before it is referenced in the procedure.

    Any associated actual argument must be definable.

  - INOUT

    Specifies that the dummy argument can both provide data to the procedure and return data to the calling program.

    Any associated actual argument must be definable.

  d-arg
  Is the name of a dummy argument. It cannot be a dummy procedure or dummy pointer.

Rules and Behavior

The INTENT statement can only appear in the specification part of a subprogram or interface body.

If no INTENT attribute is specified for a dummy argument, its use is subject to the limitations of the associated actual argument.

If a function specifies a defined operator, the dummy arguments must have intent IN.

If a subroutine specifies defined assignment, the first argument must have intent OUT or INOUT, and the second argument must have intent IN.

A dummy argument with intent IN (or a subobject of such a dummy argument) must not appear as any of the following:

- A DO variable or implied-DO variable
- The variable of an assignment statement
- The pointer-object of a pointer assignment statement
- An object or STAT variable in an ALLOCATE or DEALLOCATE statement
- An input item in a READ statement
- A variable name in a NAMELIST statement if the namelist group name appears in a NML specifier in a READ statement
- An internal file unit in a WRITE statement
- A definable variable in an INQUIRE statement
- An IOSTAT or SIZE specifier in an I/O statement
- An actual argument in a reference to a procedure with an explicit interface if the associated dummy argument has intent OUT or INOUT

If an actual argument is an array section with a vector subscript, it cannot be associated with a dummy array that is defined or redefined (has intent OUT or INOUT).

Examples

The following example shows type declaration statements specifying the INTENT attribute:

    SUBROUTINE TEST(I, J)
      INTEGER, INTENT(IN) :: I
      INTEGER, INTENT(OUT), DIMENSION(I) :: J

The following are examples of the INTENT statement:

    SUBROUTINE TEST(A, B, X)
       INTENT(INOUT) :: A, B
       ...

    SUBROUTINE CHANGE(FROM, TO)
       USE EMPLOYEE_MODULE
       TYPE(EMPLOYEE) FROM, TO
       INTENT(IN) FROM
       INTENT(OUT) TO
       ...

For More Information:

- On type declaration statements, see Section 5.1.
- On argument association, see Section 8.8.
- On compatible attributes, see Table 5-1.

Previous Page Next Page Table of Contents