| Deutsch English Français Italiano |
|
<voanvq$o6uh$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Janis Papanagnou <janis_papanagnou+ng@hotmail.com>
Newsgroups: comp.lang.c
Subject: Re: Two questions on arrays with size defined by variables
Date: Sun, 9 Feb 2025 18:17:45 +0100
Organization: A noiseless patient Spider
Lines: 97
Message-ID: <voanvq$o6uh$1@dont-email.me>
References: <vo9mns$gsd7$1@dont-email.me> <vo9nn3$gtph$1@dont-email.me>
<vo9u0u$i0n8$1@dont-email.me> <878qqf1kl2.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=windows-1252
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 09 Feb 2025 18:17:47 +0100 (CET)
Injection-Info: dont-email.me; posting-host="9f9c4a4d467cd7826f6af056aa0b049d";
logging-data="793553"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX195eCx7zrNrYw54pJO+1Ega"
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.8.0
Cancel-Lock: sha1:8V2LI3rm8PMgjOBjwD54iigcPKk=
X-Enigmail-Draft-Status: N1110
In-Reply-To: <878qqf1kl2.fsf@nosuchdomain.example.com>
Bytes: 3918
On 09.02.2025 11:25, Keith Thompson wrote:
> Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:
>> On 09.02.2025 09:06, Andrey Tarasevich wrote:
[...]
>>> 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.
>>
>> Oh, sorry, no; above I had just written an excerpt. - Actually I had
>> those two examples above within a main() function. - Sorry again for
>> my inaccuracy.
>>
>> What I meant was (with surrounding context) that I knew (from _other_
>> languages) a syntax like
>>
>> main ()
>> {
>> int n = 5;
>>
>> {
>> char * arr[n];
>> ...
>> }
>> }
>>
>> And in "C" (C99) I tried it *without* the _inner block_
>>
>> main ()
>> {
>> int n = 5;
>> char * arr[n];
>> ...
>> }
>
> The first line needs to be `int main(void)`. The "implicit int"
> misfeature was removed in C99. [...]
Thanks. (Again answering more/something different than I asked.) :-)
Please note that I structurally illustrated just the posters question
about where the relevant code excerpt resides (file scope or else).
If I'd knew the audience is picky I'd posted the whole test program;
but then there's even much more picky comments to expect. ;-)
I hope to mollify the audience if I point out that my code actually
looks *like* this
...
int main (int argc, char * argv[])
{
...
return 0;
}
(And, yes, I know that the "..." is not correct, and argc is unused,
and I omitted 'const', etc.)
> [...] but that's not relevant to your example).
Right.
>
>> [...]
>
> C90 didn't have VLAs at all.
>
> C99 introduced them and required all implementations to support them.
>
> C11 made variably modified types optional.
>
> C23 still makes variable length arrays with automatic storage duration
> optional but "Parameters declared with variable length array types are
> adjusted and then define objects of automatic storage duration with
> pointer types. Thus, support for such declarations is mandatory."
> (Support for C23 is still preliminary.)
>
>> For my purpose it would be okay to know whether with the C99 version
>> (that I used) it's okay, or whether that's some GNU specific extension
>> or some such.
>
> C99 requires support for local objects of variable length array types.
Thanks!
Janis