Developer Guide and Reference

ID 767251
Date 10/31/2024
Public
Document Table of Contents

Assignment - Intrinsic Computational

Statement: Assigns a value to a nonpointer variable. In the case of pointers, intrinsic assignment is used to assign a value to the target associated with the pointer variable. The value assigned to the variable (or target) is determined by evaluation of the expression to the right of the equal sign.

variable=expression

variable

Is the name of a scalar or array of intrinsic or derived type (with no defined assignment). The array cannot be an assumed-size array, and neither the scalar nor the array can be declared with the PARAMETER or INTENT(IN) attribute.

expression

Is of intrinsic type or the same derived type as variable. Its shape must conform with variable. If necessary, it is converted to the same type and kind as variable.

Description

Before a value is assigned to the variable, the expression part of the assignment statement and any expressions within the variable are evaluated. No definition of expressions in the variable can affect or be affected by the evaluation of the expression part of the assignment statement.

NOTE:

When the runtime system assigns a value to a scalar integer or character variable and the variable is shorter than the value being assigned, the assigned value may be truncated and significant bits (or characters) lost. This truncation can occur without warning, and can cause the runtime system to pass incorrect information back to the program.

If variable is a pointer, it must be associated with a definable target. The shape of the target and expression must conform and their type and kind parameters must match.

If variable is allocatable and it is not allocated, it is allocated to be conformable with expression. If variable is an allocatable array with a different shape than expression and expression is not scalar, it is deallocated and reallocated to be the same size as expression.

If variable is deferred-length character and allocatable, and the allocated length differs from the length of expression, it is deallocated and reallocated with the same length as expression. If variable is polymorphic and has a different dynamic type than expression, it is deallocated and reallocated with the same dynamic type and kind type parameters as expression.

If the !DIR$ NOSTRICT compiler directive (the default) is in effect, then you can assign a character expression to a noncharacter variable, and a noncharacter variable or array element (but not an expression) to a character variable.

Example


    REAL a, b, c
    LOGICAL abigger
    CHARACTER(16) assertion
    c = .01
    a = SQRT (c)
    b = c**2
    assertion = 'a > b'
    abigger = (a .GT. b)
    WRITE (*, 100) a, b
100 FORMAT (' a =', F7.4, ' b =', F7.4)
    IF (abigger) THEN
            WRITE (*, *) assertion, ' is true.'
    ELSE
            WRITE (*, *) assertion, ' is false.'
    END IF
    END
! The program above has the following output:
!     a =    .1000     b =   .0001         a > b is true.
! The following code shows legal and illegal
! assignment statements:
!
    INTEGER i, j
    REAL rone(4), rtwo(4), x, y
    COMPLEX z
    CHARACTER name6(6), name8(8)
    i         = 4
    x         = 2.0
    z         = (3.0, 4.0)
    rone(1) = 4.0
    rone(2) = 3.0
    rone(3) = 2.0
    rone(4) = 1.0
    name8   = 'Hello,'

! The following assignment statements are legal:
    i     = rone(2); j = rone(i); j = x
    y     = x; y = z; y = rone(3); rtwo = rone; rtwo = 4.7
    name6 = name8

! The following assignment statements are illegal:
    name6 = x + 1.0; int = name8//'test'; y = rone
    END