The GNU Fortran Compiler: STRUCTURE and RECORD

Next: ENCODE and DECODE statements, Up: Extensions not implemented in GNU Fortran [Contents][Index]

#### 6.2.1 `STRUCTURE` and `RECORD`

Record structures are a pre-Fortran-90 vendor extension to create user-defined aggregate data types. GNU Fortran does not support record structures, only Fortran 90’s “derived types”, which have a different syntax.

In many cases, record structures can easily be converted to derived types. To convert, replace `STRUCTURE /`structure-name`/` by `TYPE` type-name. Additionally, replace `RECORD /`structure-name`/` by `TYPE(`type-name`)`. Finally, in the component access, replace the period (`.`) by the percent sign (`%`).

Here is an example of code using the non portable record structure syntax:

    ! Declaring a structure named ``item'' and containing three fields:
    ! an integer ID, an description string and a floating-point price.
    STRUCTURE /item/
      INTEGER id
      CHARACTER(LEN=200) description
      REAL price
    END STRUCTURE

    ! Define two variables, an single record of type ``item''
    ! named ``pear'', and an array of items named ``store_catalog''
    RECORD /item/ pear, store_catalog(100)

    ! We can directly access the fields of both variables
    pear.id = 92316
    pear.description = "juicy D'Anjou pear"
    pear.price = 0.15
    store_catalog(7).id = 7831
    store_catalog(7).description = "milk bottle"
    store_catalog(7).price = 1.2

    ! We can also manipulate the whole structure
    store_catalog(12) = pear
    print *, store_catalog(12)

This code can easily be rewritten in the Fortran 90 syntax as following:

    ! ``STRUCTURE /name/ ... END STRUCTURE'' becomes
    ! ``TYPE name ... END TYPE''
    TYPE item
      INTEGER id
      CHARACTER(LEN=200) description
      REAL price
    END TYPE

    ! ``RECORD /name/ variable'' becomes ``TYPE(name) variable''
    TYPE(item) pear, store_catalog(100)

    ! Instead of using a dot (.) to access fields of a record, the
    ! standard syntax uses a percent sign (%)
    pear%id = 92316
    pear%description = "juicy D'Anjou pear"
    pear%price = 0.15
    store_catalog(7)%id = 7831
    store_catalog(7)%description = "milk bottle"
    store_catalog(7)%price = 1.2

    ! Assignments of a whole variable do not change
    store_catalog(12) = pear
    print *, store_catalog(12)

Next: ENCODE and DECODE statements, Up: Extensions not implemented in GNU Fortran [Contents][Index]