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

CraigDillabaugh via Digitalmars-d digitalmars-d at puremagic.com
Mon Apr 13 10:10:15 PDT 2015


On Monday, 13 April 2015 at 17:08:57 UTC, CraigDillabaugh wrote:
> On Monday, 13 April 2015 at 17:05:59 UTC, BS & LD 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.
>
> Yes, and as John pointed out it isn't the nicest way to do 
> this. Sorry for the noise.

I should mention that while it is on the heap, the storage should 
get GC'd.


More information about the Digitalmars-d mailing list