Deutsch   English   Français   Italiano  
<868qq7yydd.fsf@linuxsc.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups: comp.lang.c
Subject: Re: Two questions on arrays with size defined by variables
Date: Sat, 15 Feb 2025 08:19:10 -0800
Organization: A noiseless patient Spider
Lines: 52
Message-ID: <868qq7yydd.fsf@linuxsc.com>
References: <vo9mns$gsd7$1@dont-email.me> <vo9nn3$gtph$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Sat, 15 Feb 2025 17:19:11 +0100 (CET)
Injection-Info: dont-email.me; posting-host="c7695d44d5813647a552660a568166b3";
	logging-data="109065"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18Q96OJqpQQRRco+6EzPQDbGLn1Yw7Aetg="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:oJKi97TslyrpRKQPyIxPQi/SFkY=
	sha1:JZ5U3AKOoj8dMMPuQRqJJic258w=
Bytes: 2765

Andrey Tarasevich <noone@noone.net> writes:

> On Sat 2/8/2025 11:50 PM, Janis Papanagnou wrote:
>
>> I've found examples on the Net where the arrays have been defined
>> in a function context and the size passed as parameter
>>
>>    f(int n) {
>>       char * arr[n];
>>       ...
>>    }
>
> Yes, that would be a VLA.
>
>> That reminded me on other languages where you'd need at least a
>> block context for dynamically sized arrays, like
>>
>>    int n = 5;
>>    {
>>       char * arr[n];
>>       ...
>>    }
>
> But a function body is in itself a block.  Inside a function body
> you are already in "a block context".
>
>> Anyway.  I tried it without function or block context
>>
>>    int n = 5;
>>    char * arr[n];
>>    ...
>>
>> and it seemed to work seamlessly like that (with GNU cc,
>> -std=C99).
>
> You mean you did this at file scope?  No, VLAs are illegal at file
> scope.  And I was unable to repeat this feat in GCC.
>
>> Q1:  Is this a correct (portable) form?
>
> VLA objects have to be declared locally.  However, keep in mind
> that support for local declarations of VLA _objects_ is now
> optional (i.e. not portable).  Support for variably-modified
> _types_ themselves (VLA types) is mandatory.  But you are not
> guaranteed to be able to declare an actual VLA variable.

In regular English usage, there is no hyphen between "variably"
and "modified" in "variably modified types".  The reason for this
rule is "variably" is an adverb, and thus can pertain only to the
adjective "modified", and not to the noun "types".  A hyphen is
used only when needed to clarify ambiguity;  because there is no
ambiguity, there is no hyphen.