| Deutsch English Français Italiano |
|
<86msbgw49b.fsf@linuxsc.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: 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: Loops (was Re: do { quit; } else { })
Date: Tue, 13 May 2025 15:10:56 -0700
Organization: A noiseless patient Spider
Lines: 53
Message-ID: <86msbgw49b.fsf@linuxsc.com>
References: <vspbjh$8dvd$1@dont-email.me> <20250413072027.219@kylheku.com> <vtgpce$39229$1@dont-email.me> <vti2ki$g23v$1@dont-email.me> <vtin99$vu24$1@dont-email.me> <vtiuf0$18au8$1@dont-email.me> <vtj97r$1i3v3$1@dont-email.me> <vtl166$36p6b$1@dont-email.me> <vtlcg0$3f46a$2@dont-email.me> <20250415153419.00004cf7@yahoo.com> <86h62078i8.fsf@linuxsc.com> <20250504180833.00000906@yahoo.com> <86plggzilx.fsf@linuxsc.com> <vvnsvt$3k1mu$1@dont-email.me> <86ldr4yx0x.fsf@linuxsc.com> <vvpmm2$3dhl$1@dont-email.me> <vvpsji$4jht$1@dont-email.me> <vvr5mg$l85c$1@dont-email.me> <vvt2tg$14otk$2@dont-email.me> <1000cs3$2234m$1@dont-email.me> <87sel8nqid.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Wed, 14 May 2025 00:10:57 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="adcc0210618ce5c814d2d263cc71a7bf";
logging-data="2180192"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19MtnTOcWvxOJRmKcYJiNCNkCQ0z2PmJB8="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:oLM+9XjfFObBES3hpzENYs4wpCM=
sha1:DFRvHVsplmW6AkXmwEJqJU0LpdA=
Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
> Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:
>
>> On 12.05.2025 17:08, David Brown wrote:
>>
>>> On 11/05/2025 23:43, James Kuyper wrote:
>>
>> [...]
>>
>>>> More precisely, it makes it undefined behavior for values to point to an
>>>> array of less than 10 doubles.
>>>
>>> The wording of the C standard (C11, as that's what I have open at the
>>> moment) is :
>>>
>>> """
>>> If the keyword static also appears within the [ and ] of the array type
>>> derivation, then for each call to the function, the value of the
>>> corresponding actual argument shall provide access to the first element
>>> of an array with at least as many elements as specified by the size
>>> expression.
>>> """
>>
>> Oh! - This is somewhat surprising to me. - When I first read about
>> the "arr[static N]" I assumed that it would be possible to pass any
>> sub-array, say "&arr[8]" (or "arr+8") as long as it's large enough
>> to still have N elements from the starting point, but the quote says
>> explicitly "access to the _first_ element of an array" (which I'd
>> interpret as "&arr[0]" (or "arr"). - Unless I misinterpreted that;
>> what would be the reason for that?
>
> My personal interpretation is that this:
>
> void func(int arr[static 5]) {
> }
>
> int main(void) {
> int arr[10];
> func(arr+5); // OK
> // func(arr+6); // UB
> }
>
> is valid, because, for example, the last 5 elements of a 10-element
> array object can be treated as a 5-element array object. gcc seems
> to agree, based on the fact that it warns about func(arr+6) but
> not about func(arr+5).
>
> This is a fundamental part of my mental model of C, but in a few
> minutes of searching I wasn't able to find explicit wording in the
> standard that supports it.
In N1570, 6.7.6.3 p7.