Fixed size array initialization

rumbu rumbu at rumbu.ro
Sat Feb 10 14:35:52 UTC 2018


On Saturday, 10 February 2018 at 12:28:16 UTC, b2.temp wrote:
> On Saturday, 10 February 2018 at 10:55:30 UTC, rumbu wrote:
>> I know that according to language spec 
>> (https://dlang.org/spec/arrays.html#static-init-static) you 
>> can skip declaring all your elements in a fixed size array.
>>
>> I'm just recovering from a bug which took me one day to 
>> discover because of this.
>>
>> I have a large static initialized array, let's say int[155], 
>> and I forgot to declare the last element:
>>
>> int[155] myarray = [
>>   a,
>>   b,
>>   c,
>>   ...
>>   //forgot to declare the 155th element
>> ];
>>
>> I took for granted that the compiler will warn me about the 
>> fact that my number of elements doesn't match the array 
>> declaration but I was wrong.
>>
>> Does it worth to fill an enhancement on this, or this is 
>> intended behavior?
>
> I used to agree 
> (https://issues.dlang.org/show_bug.cgi?id=17341) and even 
> patched the compiler to emit a deprecation in this case. Then i 
> discovered that druntime for example relies on this.
>
> The classic use case is to init a LUT where only a few elements 
> need a non-default value, for example:
>
> ```
> bool[char.max] lut = [10:true, 13:true, 9: true];
> assert(!lut[46]);
> assert(lut[9]);
> ```
>
> which can be useful.

In this case, it there any way to be sure that I declared all the 
elements I intended? Obviously, without counting them by hand.


More information about the Digitalmars-d-learn mailing list