D Static Array
Salih Dincer
salihdb at hotmail.com
Sun Jan 15 14:23:59 UTC 2023
I wonder why the above code is allowed in D? Is there a special
reason for this?
```d
import std.stdio : writeln;
void main()
{
int[0] arr = 40; // ?
typeid(arr).writeln(": ", arr); // int[0]: []
}
```
When we look at the C side, the situation is deplorable! But I
can claim that there is only one element allowed there. I found
the following comment of unknown origin:
> In C99 and later C standards, an array size can be defined as 0
> and it can include a feature called flexible array member (FAM)
> which is an array member without specifying its size, it means
> the size of array will be determined at runtime. However, FAM
> can only be used in struct and union types and must be the last
> member of the struct/union.
I tried more than claimed:
```c
#include <stdio.h>
int main() {
int arr[0];
arr[0] = 40;
arr[1] = 41;
arr[2] = 42;
for (int i = 0; i < 3; i++)
{
printf("%d ", arr[i]);
}
return 0; // "40 880975872 787869145"
}
```
And yeah, going out of range is not allowed on D, getting this
error:
> array index 0 is out of bounds
One more question: Since 0 element initialize is allowed in D, so
where did 40 go? I can see that number 40 in C!
Thanks...
SDB at 79
More information about the Digitalmars-d-learn
mailing list