A data object is a variable, constant, or subobject of a constant.
A variable can have a value and can be defined or redefined during execution of an executable program. A variable can be:
A subobject (of a variable) is a portion of a named object that can be referenced and defined. It can be:
A subobject of a constant is a portion of a constant. The referenced portion may depend on a variable value.
A constant has a value and cannot be defined or redefined during execution of an executable program. A constant with a name is a named constant (see PARAMETER). A constant without a name is a literal constant. A literal constant can be of intrinsic type or it can be typeless (hexadecimal, octal, binary, or Hollerith). The optional kind type parameter of a literal constant can only be a digit string or a scalar integer named constant.
A signed literal constant can have a leading plus or minus sign. All other literal constants must be unsigned; they must have no leading sign. The value zero is considered neither positive nor negative. You can specify zero as signed or unsigned.
An automatic object is a data object that is dynamically allocated within a procedure. It is a local entity of a subprogram and has a nonconstant character length and/or a nonconstant array bound. It is not a dummy argument.
An automatic object always has the controlled automatic storage class.
An automatic object cannot be specified in a DATA, EQUIVALENCE, NAMELIST, or COMMON statement, nor can the AUTOMATIC, STATIC, PARAMETER, or SAVE attributes be specified for it. An automatic object cannot be initialized or defined with an initialization expression in a type declaration statement, but it can have a default initialization. An automatic object cannot appear in the specification part of a main program or module.