A variable may be declared at the project file level, or within a package. Here are some examples of variable declarations:
This_OS : OS := external ("OS"); -- a typed variable declaration That_OS := "GNU/Linux"; -- an untyped variable declaration
The syntax of a typed variable declaration is identical to the Ada syntax for an object declaration. By contrast, the syntax of an untyped variable declaration is identical to an Ada assignment statement. In fact, variable declarations in project files have some of the characteristics of an assignment, in that successive declarations for the same variable are allowed. Untyped variable declarations do establish the expected kind of the variable (string or string list), and successive declarations for it must respect the initial kind.
A string variable declaration (typed or untyped) declares a variable whose value is a string. This variable may be used as a string expression.
File_Name := "readme.txt"; Saved_File_Name := File_Name & ".saved";
A string list variable declaration declares a variable whose value is a list of strings. The list may contain any number (zero or more) of strings.
Empty_List := (); List_With_One_Element := ("-gnaty"); List_With_Two_Elements := List_With_One_Element & "-gnatg"; Long_List := ("main.ada", "pack1_.ada", "pack1.ada", "pack2_.ada" "pack2.ada", "util_.ada", "util.ada");
The same typed variable may not be declared more than once at project level, and it may not be declared more than once in any package; it is in effect a constant.
The same untyped variable may be declared several times. Declarations are elaborated in the order in which they appear, so the new value replaces the old one, and any subsequent reference to the variable uses the new value. However, as noted above, if a variable has been declared as a string, all subsequent declarations must give it a string value. Similarly, if a variable has been declared as a string list, all subsequent declarations must give it a string list value.
A variable reference may take several forms:
A context may be one of the following:
A variable reference may be used in an expression.