1-element arrays are invalid in VHLD?

V

valentin tihomirov

Guest
This code is accepted

type TLETTERS is array (0 to 1) of CHARACTER;
constant LETTERS: TLETTERS := ('a', 'b');

however the following is not

type TLETTERS is array (0 to 0) of CHARACTER;
constant LETTERS: TLETTERS := ('a');

IMO, this is called inconsistency (bad design).

BTW, is there a more compact (single line) way to declare a constant array
avoiding the type declaration? I guess the long preparations creating
templates (which are types in this case) are necessary for instantiating
multiple objects using this template. But I have only one array, so what is
the need to declare a special type for it? In C, we can instantiate an array
of any elements avoiding developement of special array classes for each
basic element. Am I missing something?
 
valentin tihomirov wrote:
This code is accepted
type TLETTERS is array (0 to 1) of CHARACTER;
constant LETTERS: TLETTERS := ('a', 'b');
however the following is not
type TLETTERS is array (0 to 0) of CHARACTER;
constant LETTERS: TLETTERS := ('a');
IMO, this is called inconsistency (bad design).
The type isn't the problem.
The problem is ambiguity of ('a')

If ('a') is an array then parenthesis
are disallowed around character literals.
You can't have it both ways.

IMO this is an example of
incompleteness for the sake of a
logically consistent language.
This is a limit on any formal system.

For your example, this would also work:
constant LETTER: TLETTERS := (0 =>'a');

-- Mike Treseler
 

Welcome to EDABoard.com

Sponsor

Back
Top