Does 'D' language supports 'C' like VLA?

Dmitri Makarov via Digitalmars-d digitalmars-d at puremagic.com
Mon Apr 13 10:19:52 PDT 2015


This should work the way you want it to:

void main()
{
   immutable size_t szArr = 3;

   int[szArr] arr;
}

Regards,

Dmitri


On Mon, Apr 13, 2015 at 7:05 PM, BS & LD via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
> On Monday, 13 April 2015 at 17:02:13 UTC, CraigDillabaugh wrote:
>>
>> On Monday, 13 April 2015 at 16:53:55 UTC, BS & LD wrote:
>>>
>>> As you know in 'C' you can create a variable-length-array using variably
>>> modified type and a run-time variable allocating a storage for it - the same
>>> way for any local (normally using the stack).
>>>
>>> However in 'D' I don't see such feature. Code like this fails:
>>>
>>> void main()
>>> {
>>>    size_t szArr = 3;
>>>
>>>    int[szArr] arr;
>>> }
>>>
>>> With this error message:
>>>
>>> error: variable szArr cannot be read at compile time
>>>     int[szArr] arr;
>>>
>>> Life example - http://melpon.org/wandbox/permlink/a6CzBhYk88FohKlf
>>>
>>> Note:  I'm also amazed why 'D' compiler can't detect that 'szArr' is a
>>> constant anyway.
>>
>>
>> This likely belongs in D.learn.  What you are looking for is:
>>
>> int[] arr;
>> arr.length = 3;
>
>
> I suppose this will allocate the array on the 'heap' or it's storage will
> last past the function scope doesn't it?
>
> What I want is to allocate such variable-length-array on the stack as any
> other local variable.


More information about the Digitalmars-d mailing list