Copyright Digital Equipment Corp. All rights reserved.

Character

 Format:

    CHARACTER[*len[,] [[,att]...::] v[*len] [/clist/] 
                                    [,v[*len] [/clist/]]...

    len    Is an unsigned integer constant, an integer constant 
           expression enclosed in parentheses, or an asterisk (*)
           enclosed in parentheses.  The value of "len" specifies 
           the length of the character data elements.

    att    Is one of the following attribute specifiers:

           ALLOCATABLE       POINTER
           AUTOMATIC         PRIVATE
           DIMENSION         PUBLIC
           EXTERNAL          SAVE
           INTENT            STATIC
           INTRINSIC         TARGET
           OPTIONAL          VOLATILE
           PARAMETER

    v      Is the symbolic name of a constant, variable, array, 
           statement function or function subprogram, or array 
           specification. The name can optionally be followed by 
           a data type length specifier (*len or *(*)).

    clist  Is a list of constants, as in a DATA statement.  If
           "v" is the symbolic name of a constant, "clist" must 
           not be present.

 If you use CHARACTER*len, "len" is the default length specification
 for that list.  If an item in that list does not have a length
 specification, the item's length is "len".  However, if an item
 does have a length specification, it overrides the default length
 specified in CHARACTER*len.

 When an asterisk length specification *(*) is used for a function
 name or dummy argument, it assumes the length of the corresponding
 function reference or actual argument.  Similarly, when an asterisk
 length specification is used for the symbolic name of a constant,
 the name assumes the length of the actual constant it represents.
 For example, STRING assumes a 9-byte length in the following
 statements:

    CHARACTER*(*) STRING
    PARAMETER (STRING = 'VALUE IS:')

 The length specification must range from 1 to 65535.  If no length
 is specified, a length of 1 is assumed.

 Character type declaration statements can define arrays if they
 include array specifications in their list.  The array
 specification goes first if both an array specification and a
 length are specified.

 A character type declaration statement can assign initial values to
 variables or arrays if it specifies a list of constants (the
 clist).  The specified constants initialize only the variable or
 array that immediately precedes them.  The "clist" cannot have more
 than one element unless it initializes an array.  When the "clist"
 initializes an array, it must contain a value for every element in
 the array.

 In a function declaration, an array must be a deferred-shape array
 if it has the POINTER attribute; otherwise, it must be an
 explicit-shape array.

 The double colon separator (::) is required only if the declaration
 contains an attribute specifier or an initialization expression;
 otherwise it is optional.

 The same attribute must not appear more than once in a given type
 declaration statement, and an entity cannot be given the same
 attribute more than once in a scoping unit.

 If the PARAMETER attribute is specified, the declaration must
 contain an initialization expression.

 The following objects cannot be initialized in a type declaration
 statement:

  o  A dummy argument

  o  A function result

  o  An object in a named common block (unless the type declaration
     is in a block data program unit)

  o  An object in blank common

  o  An allocatable array

  o  A pointer

  o  An external name

  o  An intrinsic name

  o  An automatic object

  o  An object that has the AUTOMATIC attribute



                                NOTE

         The CHARACTER*len form for a CHARACTER  declaration
         is obsolescent in Fortran 95.  VSI Fortran flags
         obsolescent features, but fully supports them.