### 15.1.14 OPTIONS Directive

The OPTIONS directive affects data alignment and warnings about data alignment. It takes the following form:

  cDEC$ OPTIONS option [option]
  ...
  cDEC$ END OPTIONS
  c
  Is one of the following: C (or c), !, or * (see Section 15.1.1).
  option
  Is one (or both) of the following:
  - /WARN=[NO]ALIGNMENT

    Controls whether warnings are issued by the compiler for data that is not naturally aligned. By default, you receive compiler messages when misaligned data is encountered (/WARN=ALIGNMENT).

  - /[NO]ALIGN[=p]

    Controls alignment of fields in record structures and data items in common blocks. The fields and data items can be naturally aligned (for performance reasons) or they can be packed together on arbitrary byte boundaries.

    p
    Is a specifier with one of the following forms:

    [class =] rule
    (class = rule,...)
    ALL
    NONE

    class
    Is one of the following keywords:

    - COMMONS: For common blocks
    - RECORDS: For records
    - STRUCTURES: A synonym for RECORDS

    rule
    Is one of the following keywords:

    - PACKED

      Packs fields in records or data items in common blocks on arbitrary byte boundaries.

    - NATURAL

      Naturally aligns fields in records and data items in common blocks on up to 64-bit boundaries (inconsistent with the Fortran 95/90 standard).

      This keyword causes the compiler to naturally align all data in a common block, including INTEGER(8), REAL(8), and all COMPLEX data.

    - STANDARD

      Naturally aligns data items in common blocks on up to 32-bit boundaries (consistent with the Fortran 95/90 standard).

      This keyword only applies to common blocks; so, you can specify /ALIGN=COMMONS=STANDARD, but you cannot specify /ALIGN=STANDARD.

    ALL
    Is the same as specifying OPTIONS /ALIGN, OPTIONS /ALIGN=NATURAL, and OPTIONS /ALIGN=(RECORDS=NATURAL,COMMONS=NATURAL).

    NONE
    Is the same as specifying OPTIONS /NOALIGN, OPTION /ALIGN=PACKED, and OPTIONS/ALIGN=(RECORDS=PACKED,COMMONS=PACKED).

Rules and Behavior

The OPTIONS (and accompanying END OPTIONS) directives must come after OPTIONS, SUBROUTINE, FUNCTION, and BLOCK DATA statements (if any) in the program unit, and before the executable part of the program unit.

The OPTIONS directive supersedes the compiler option that sets alignment.

For performance reasons, Compaq Fortran aligns local data items on natural boundaries. However, EQUIVALENCE, COMMON, RECORD, and STRUCTURE data declaration statements can force misaligned data. If /WARN=NOALIGNMENT is specified, warnings will not be issued if misaligned data is encountered.

  Note: Misaligned data significantly increases the time it takes to execute a program. As the number of misaligned fields encountered increases, so does the time needed to complete program execution. Specifying cDEC$ OPTIONS/ALIGN (or the compiler option that sets alignment) minimizes misaligned data.

If you want aligned data in common blocks, do one of the following:

- Specify /ALIGN=COMMONS=STANDARD for data items up to 32 bits in length.
- Specify /ALIGN=COMMONS=NATURAL for data items up to 64 bits in length.
- Place source data declarations within the common block in descending size order, so that each data item is naturally aligned.

If you want packed, unaligned data in a record structure, do one of the following:

- Specify /ALIGN=RECORDS=PACKED.
- Place source data declarations in the record structure so that the data is naturally aligned.

An OPTIONS directive must be accompanied by an END OPTIONS directive; the directives can be nested up to 100 levels. For example:

     CDEC$ OPTIONS   /ALIGN=PACKED         ! Start of Group A
        declarations
     CDEC$ OPTIONS   /ALIGN=RECO=NATU         ! Start of nested Group B
        more declarations
     CDEC$ END   OPTIONS                      ! End of Group B
        still more declarations
     CDEC$ END   OPTIONS                   ! End of Group A

The CDEC$ OPTIONS specification for Group B only applies to RECORDS; common blocks within Group B will be PACKED. This is because COMMONS retains the previous setting (in this case, from the Group A specification).

For More Information:

- On syntax rules for all general directives, see Section 15.1.1.
- On alignment and data sizes, see your user manual or programmer's guide.
- On compiler options, see your user manual or programmer's guide.

Previous Page Next Page Table of Contents