5.1 Non-standard Extensions

The following extensions to the standard Fortran language are accepted by the NAG Fortran Compiler.

5.1.1 BOZ literal constants outside DATA statements

The NAG Fortran Compiler accepts hexadecimal, octal and binary literal constants in any context where an integer literal would be accepted. Such constants have a data type of default INTEGER, unless there are more digits in the BOZ constant than will fit in a default INTEGER; e.g., Z'12345678' would be of type default INTEGER, and Z'123456789' would be a 64-bit integer.

5.1.2 Longer Names

Names may be up to 199 characters long.

5.1.3 Dollar Sign in Names

The dollar sign ‘$’ may appear in names as if it were a letter. On some systems this name is directly used in the link name, but on others, it is translated to DOLLAR.

5.1.4 Input/output endian/format conversion

Runtime conversion of unformatted input/output files is enabled by the CONVERT= specifier. This is an OPEN statement specifier, and takes a scalar default character argument; the accepted values are:
BIG_ENDIAN
synonym for BIG_IEEE;
BIG_IEEE_DD
big-endian with IEEE single and double precision floating point but with double-double for quad precision;
BIG_IEEE
big-endian with IEEE floating point include 128-bit quad precision;
BIG_NATIVE
big-endian with native floating-point formats;
LITTLE_ENDIAN
synonym for LITTLE_IEEE;
LITTLE_IEEE_DD
little-endian with IEEE single and double precision floating point but with double-double for quad precision;
LITTLE_IEEE
little-endian with IEEE floating point include 128-bit quad precision;
LITTLE_NATIVE
little-endian with native floating-point formats;
NATIVE
native endianness and data format.

It is also possible to specify this with an environment variable at runtime; when unit n is opened, if the environment variable FORT_CONVERTn exists, its value is interpreted as a CONVERT= specifier value. If the environment variable exists it takes precedence over any CONVERT= specifier in the OPEN statement. If the environment variable does not exist, and there is no CONVERT= specifier in the OPEN statement, the conversion mode is taken from the -convert= option at compile time; the default is NATIVE (i.e. no conversion).

The CONVERT= specifier is also available in the INQUIRE statement, and sets its argument to the current conversion mode or to 'UNKNOWN' if the file is not connected for unformatted input/output.

5.1.5 Elemental BIND(C) procedures

Interoperable (BIND(C)) procedures are permitted to be declared as ELEMENTAL. Such a procedure must satisfy the normal Fortran requirements for elemental procedures, in particular they must have scalar dummy arguments and must be pure (free from side-effects).

5.1.6 Maximum array rank is 31

The maximum rank of an array has been increased to 31 (the Fortran 2008 standard only requires 15, and previous Fortran standards only required 7). For example,
   REAL array(2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2)
declares a 30-dimensional array (which will take 4GiB of memory to store).