| Deutsch English Français Italiano |
|
<vo9u0u$i0n8$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 10:54:36 +0100
Organization: A noiseless patient Spider
Lines: 88
Message-ID: <vo9u0u$i0n8$1@dont-email.me>
References: <vo9mns$gsd7$1@dont-email.me> <vo9nn3$gtph$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Injection-Date: Sun, 09 Feb 2025 10:54:38 +0100 (CET)
Injection-Info: dont-email.me; posting-host="4527279b24ca6f6754d4b39b537bfbcd";
logging-data="590568"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/jmie7PvSbm5yVpTtN03tx"
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
Thunderbird/45.8.0
Cancel-Lock: sha1:UNVsOdIUbKyq9eKHs4+ghWDQrnU=
X-Enigmail-Draft-Status: N1110
In-Reply-To: <vo9nn3$gtph$1@dont-email.me>
Bytes: 3399
On 09.02.2025 09:06, Andrey Tarasevich wrote:
> 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.
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];
...
}
and it seemed to work that way. (In those other languages that wasn't
possible.)
>
>> 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.
I fear I don't understand what you're saying here. - By "now" do you
mean newer versions of the C standards? That you can rely only, say,
rely on it with C99 but maybe not before and not in later C standards
conforming compilers?
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.
Janis
>
>> [...]