# Specification Statements

A specification statement is a nonexecutable statement that declares the attributes of data objects. In Standard Fortran, many of the attributes that can be defined in specification statements can also be optionally specified in type declaration statements.

The following are specification statements:

- Type Declarations

  Explicitly specify the properties (for example: data type, rank, and extent) for data objects or functions.

- ALLOCATABLE attribute and statement

  Specifies that an array is an allocatable array with a deferred shape. The shape of an allocatable array is determined when an ALLOCATE statement is executed, dynamically allocating space for the array.

- ASYNCHRONOUS attribute and statement

  Specifies that a variable can be used for asynchronous input and output.

- AUTOMATIC and STATIC attributes and statements

  Control the storage allocation of variables in subprograms.

- BIND attribute and statement

  Specifies that an object is interoperable with C and has external linkage.

- CODIMENSION attribute and statement

  Specifies that an entity is a coarray.

- COMMON statement

  Defines one or more contiguous areas, or blocks, of physical storage (called common blocks) that can be accessed by any of the scoping units in an executable program. COMMON statements also define the order in which variables and arrays are stored in each common block, which can prevent misaligned data items.

- CONTIGUOUS attribute and statement

  Specifies that the target of a pointer or an assumed-sized array is contiguous.

- DATA statement

  Assigns initial values to variables before program execution.

- DIMENSION attribute and statement

  Specifies that an object is an array, and defines the shape of the array.

- EQUIVALENCE statement

  Specifies that a storage area is shared by two or more objects in a program unit. This causes total or partial storage association of the objects that share the storage area.

- EXTERNAL attribute and statement

  Allows an external or dummy procedure to be used as an actual argument.

- IMPLICIT statement

  Overrides the default implicit typing rules for names.

- INTENT attribute and statement

  Specifies the intended use of one or more dummy arguments.

- INTRINSIC attribute and statement

  Allows the specific name of an intrinsic procedure to be used as an actual argument. Certain specific function names cannot be used. For more information, see Intrinsic Functions Not Allowed as Actual Arguments.

- NAMELIST statement

  Associates a name with a list of variables. This group name can be referenced in some input/output operations.

- OPTIONAL attribute and statement

  Allows dummy arguments to be omitted in a procedure reference.

- PARAMETER attribute and statement

  Defines a named constant.

- POINTER attribute and statement

  Specifies that an object or a procedure is a pointer (a dynamic variable).

- PRIVATE and PUBLIC and attributes and statements

  Specifies the accessibility of entities in a module. (These attributes are also called accessibility attributes.)

- PROTECTED attribute and statement

  Specifies limitations on the use of module entities.

- SAVE attribute and statement

  Causes the values and definition of objects to be retained after execution of a RETURN or END statement in a subprogram.

- TARGET attribute and statement

  Specifies that an object can become the target of a pointer.

- VALUE attribute and statement

  Specifies a type of argument association for a dummy argument.

- VOLATILE attribute and statement

  Specifies that the value of an object is entirely unpredictable, based on information local to the current program unit.

Parent topic: Language Reference

- Type Declarations
- Effects of Equivalency and Interaction with COMMON Statements

## See Also

BLOCK DATA statement
PROGRAM statement
Derived data types
DATA
Initialization expressions
Intrinsic Data Types
Implicit Typing Rules
Specification of Data Type