Deutsch   English   Français   Italiano  
<874ixq41xs.fsf@nosuchdomain.example.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: Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: Loops (was Re: do { quit; } else { })
Date: Mon, 12 May 2025 02:23:59 -0700
Organization: None to speak of
Lines: 71
Message-ID: <874ixq41xs.fsf@nosuchdomain.example.com>
References: <vspbjh$8dvd$1@dont-email.me> <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>
	<87wmam4xa5.fsf@nosuchdomain.example.com> <868qn2zl1m.fsf@linuxsc.com>
	<87jz6m4m2o.fsf@nosuchdomain.example.com> <86selaxprh.fsf@linuxsc.com>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Mon, 12 May 2025 11:24:01 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="ec3410180c1ee7cec196ae011e16bd7a";
	logging-data="1079177"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+wafKHk2qNuRrRwNikvah3"
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:FhuprmAG9EDjsNyXDdyO8k/74wo=
	sha1:lHHnNdbE+F+eBDXDNz+NArk4KFE=

Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>>> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>>>> James Kuyper <jameskuyper@alumni.caltech.edu> writes:
>>>> [...]
>>>>> It's main potential usefulness is not in the definition of the
>>>>> function, but in calls to the function.  If the calls occur in
>>>>> a different translation unit from the definition, the compiler
>>>>> does not have the needed information.
>>>>
>>>> It does if the visible declaration has the same information.
>>>
>>> Like 'restrict', parameter array length information, specified by
>>> way of 'static', is ignored outside of function definitions.  As
>>> was intended (with 'restrict' also).
>>
>> I think that by "is ignored", you mean that compilers are not
>> required to pay attention to it.  [...]
>
> I mean it has no effect on program semantics.

It affects whether a program has defined or undefined behavior.
(Yes, a conforming compiler could ignore it.)

>>> Furthermore, and also like 'restrict', there is no general
>>> way to verify at compile time that the stipulated condition
>>> holds.
>>
>> Right, but that doesn't prevent implementations from issuing
>> useful warnings when it can determine that the stipulated
>> condition does not hold.
>
> True, but in many cases they can't, because that information
> is not part of the function's type and so often it is not
> present.

Why would it not be present?

If you mean that someone might use `[static N]` in a function's
definition but not in a declaration, sure, but I would always
make sure they match as closely as possible.  And gcc and clang
(and possibly other compilers) will issue meaningful warnings on
the basis of `[static N]` in a function declaration, even if that
declaration is not part of a definition.

>>> Considering the above, it's better to observe the status quo, and
>>> leave any diagnostics up to the discretion of the implementation,
>>> rather than try to retrofit an incompatible change that would
>>> make an infringement be a constraint violation that can't be
>>> checked anyway.
>>
>> Observing the status quo is better than what, exactly?
>
> Better than than trying to retrofit an incompatible change that
> would make an infringement be a constraint violation that can't
> be checked anyway.

And as you seem to have agreed, nobody suggested that.  Were we
supposed to guess what it's better than?  Or did I miss something?

>> The status quo is that the "[static N]" syntax has been in the
>> language since C99, and programmers and implementations are free
>> to take advantage of it.  I don't recall anyone in this thread
>> proposing a change to that.
>
> Neither do I, nor did I mean to imply that anyone had.

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */