Ada Conformity Assessment Authority      Home Conformity Assessment   Test Suite ARGAda Standard
Annotated Ada Reference Manual (Ada 2022 Draft 35)Legal Information
Contents   Index   References   Search   Previous   Next 

3.3.2 Number Declarations

A number_declaration declares a named number. 
Discussion: {AI05-0299-1} {AI12-0449-1} If a value or other property of a construct is required to be static that means it is required to be determined prior to execution. A static expression is an expression whose value is computed at compile time and is usable in contexts where the actual value might affect the legality of the construct. This is fully defined in subclause 4.9.


number_declaration ::= 
     defining_identifier_list : constant := static_expression;

Name Resolution Rules

The static_expression given for a number_declaration is expected to be of any numeric type.
 {AI12-0394-1} A name that denotes a number_declaration is interpreted as a value of a universal type, unless the expected type for the name is a non-numeric type with an Integer_Literal or Real_Literal aspect, in which case it is interpreted to be of its expected type.
To be honest: This is only a Name Resolution Rule; all named numbers are values of a universal type (see the Static Semantics below). We need this rule so that named numbers can match types with user-defined literals; we need the other rules so the value of the named number is well-defined in all cases.

Legality Rules

{AI05-0299-1} {AI12-0449-1} The static_expression given for a number declaration shall be a static expression, as defined by subclause 4.9.

Static Semantics

The named number denotes a value of type universal_integer if the type of the static_expression is an integer type. The named number denotes a value of type universal_real if the type of the static_expression is a real type.
The value denoted by the named number is the value of the static_expression, converted to the corresponding universal type.

Dynamic Semantics

The elaboration of a number_declaration has no effect. 
Proof: Since the static_expression was evaluated at compile time. 


Examples of number declarations: 
Two_Pi        : constant := 2.0*Ada.Numerics.Pi; 
                                          -- a real number (see A.5)
{AI95-00433-01} Max           : constant := 500;          -- an integer number
Max_Line_Size : constant := Max/6;        -- the integer 83
Power_16      : constant := 2**16;        -- the integer 65_536
One, Un, Eins : constant := 1;            -- three different names for 1

Extensions to Ada 83

We now allow a static expression of any numeric type to initialize a named number. For integer types, it was possible in Ada 83 to use 'Pos to define a named number, but there was no way to use a static expression of some nonuniversal real type to define a named number. This change is upward compatible because of the preference rule for the operators of the root numeric types. 

Wording Changes from Ada 83

We have moved the syntax rule into this subclause.
AI83-00263 describes the elaboration of a number declaration in words similar to that of an object_declaration. However, since there is no expression to be evaluated and no object to be created, it seems simpler to say that the elaboration has no effect.

Extensions to Ada 2012

{AI12-0394-1} Named numbers now can be used with (non-numeric) types that define user-defined literals (see 4.2.1).

Contents   Index   References   Search   Previous   Next 
Ada-Europe Ada 2005 and 2012 Editions sponsored in part by Ada-Europe