PROTECTED

Statement and Attribute: Specifies limitations on the use of module entities.

Syntax

The PROTECTED attribute can be specified in a type declaration statement or a PROTECTED statement, and takes one of the following forms:

Type Declaration Statement:

type, [att-ls, ] PROTECTED [, att-ls] :: entity[, entity] ...

Statement:

PROTECTED [::]entity[, entity] ...

type

Is a data type specifier.

att-ls

Is an optional list of attribute specifiers.

entity

Is the name of an entity in a module.

The PROTECTED attribute can only appear in the specification part of a module.

The PROTECTED attribute can only be specified for a named variable that is not in a common block.

A non-pointer object that has the PROTECTED attribute and is accessed by use association can not appear in a variable definition or as the target in a pointer assignment statement.

A pointer object that has the PROTECTED attribute and is accessed by use association must not appear as any of the following:

The following restrictions apply outside of the module in which the entity has been given the PROTECTED attribute:

Example

The following example shows a type declaration statement specifying the PROTECTED attribute:

INTEGER, PROTECTED :: D, E

Consider the following example:

MODULE counter_mod

INTEGER, PROTECTED :: current = 0

CONTAINS

INTEGER FUNCTION next()

current = current + 1 ! current can be modified here

next = current

RETURN

END FUNCTION next

END MODULE counter_mod

PROGRAM test_counter

USE counter_mod

PRINT *, next( ) ! Prints 1

current = 42 ! Error: variable is protected

END PROGRAM test_counter

See Also