default initialization of char arrays
monkyyy
crazymonkyyy at gmail.com
Wed Oct 22 20:52:36 UTC 2025
On Wednesday, 22 October 2025 at 16:35:47 UTC, 6622 wrote:
> On Wednesday, 15 October 2025 at 15:22:14 UTC, monkyyy wrote:
>> On Wednesday, 15 October 2025 at 11:51:05 UTC, Quirin Schroll
>> wrote:
>>> On Monday, 8 September 2025 at 15:42:27 UTC, Walter Bright
>>> wrote:
>>>> […]
>>>>
>>>> A `char` default initializes to `0xFF`. The programmer
>>>> wanted to default initialize the array of char to `0`, and
>>>> so used `[0]` to initialize it. This resulted in
>>>> `[0,255,255,255,255,255,255,255,255,255]`. He asked how to
>>>> default initialize it to `0` without having to tediously
>>>> enumerate the `0` for each element in the initializer.
>>>
>>> Please make this footgun an error. The compiler can tell you
>>> in the error message to use `= x` instead of `= [x]`, since
>>> it’s a common pattern in C. My best bet is that no-one uses
>>> `[0]` being in fact `[0, 0xFF …]` intentionally.
>>
>> Only because of the insane idea of intentionally invalid
>> initialization
>>
>> `int[N]=[1,2,3]` being trailing zeros makes more sense
>
> D not copying that C behavior is sane. But what makes it bad is
> that D still allows you to not define all elements of the
> array, and implicitly initiliszes them in a non intuative way.
>
> Here is what I'd change it to:
> ```
> float[10] a = [42]; // This should be a error.
> float[10] b = [0:42, 5: 3.14]; // This also should be an error.
> float[10] c = [0..$: 0]; // Sets all to zero.
> float[10] d = [42, 1..$: 0]; // First element is 42, everything
> else is zero.
> float[10] e = [1..$: 42]; // Error, first element is not
> defined.
> ```
> This should be familiar due to the slicing syntax D already has.
float[10] b = [0:42, 5: 3.14,
$:13.37];//[0,13.37,13.37,13.37,13.37,3.14,13.37...
More information about the Digitalmars-d
mailing list