RAD Studio |  |

Tentative Definitions
See Also
Collapse All

The ANSI C standard supports the concept of the tentative definition. Any external data declaration that has no storage class specifier and no initializer is considered a tentative definition. If the identifier declared appears in a later definition, then the tentative definition is treated as if the extern storage class specifier were present. In other words, the tentative definition becomes a simple referencing declaration.

If the end of the translation unit is reached and no definition has appeared with an initializer for the identifier, then the tentative definition becomes a full definition, and the object defined has uninitialized (zero-filled) space reserved for it. For example,

Copy Code

    int x;
    int x;           /*legal, one copy of x is reserved */
    int y;
    int y = 4;       /* legal, y is initialized to 4 */
    int z = 5;
    int z = 6;       /* not legal, both are initialized definitions */

Unlike ANSI C, C++ doesn't have the concept of a tentative declaration; an external data declaration without a storage class specifier is always a definition.

See Also

Declaration Syntax

Possible Declarations

External Declarations And Definitions

Type Categories

The Fundamental Types

Initialization

Declarations And Declarators

Variable Modifiers

Function Modifiers

Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!