| Deutsch English Français Italiano |
|
<875xj73sqx.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: "A diagram of C23 basic types"
Date: Mon, 14 Apr 2025 04:08:38 -0700
Organization: None to speak of
Lines: 51
Message-ID: <875xj73sqx.fsf@nosuchdomain.example.com>
References: <87y0wjaysg.fsf@gmail.com> <vsj1m8$1f8h2$1@dont-email.me>
<vsj2l9$1j0as$1@dont-email.me> <vsjef3$1u4nk$1@dont-email.me>
<vsjg6t$20pdb$1@dont-email.me> <vsjgjn$1v1n4$1@dont-email.me>
<vsjk4k$24q5m$1@dont-email.me> <vsjlcp$230a5$1@dont-email.me>
<vsjmdl$277bk$1@dont-email.me> <VsdHP.1828827$TBhc.1078002@fx16.iad>
<vskjlo$34st8$1@dont-email.me> <20250402220614.431@kylheku.com>
<85mscxlqnb.fsf@nosuchdomain.example.com>
<vsl9sn$3vdjj$2@dont-email.me> <20250403121946.134@kylheku.com>
<vsms75$1i8ud$1@dont-email.me> <vsnhq6$291i3$4@dont-email.me>
<20250409124900.00000fa1@yahoo.com> <861pu1ccsg.fsf@linuxsc.com>
<87a58pq9ig.fsf@nosuchdomain.example.com> <865xj79khz.fsf@linuxsc.com>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Mon, 14 Apr 2025 13:08:41 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="81eb20b1af8ee11d07b9431bae23cc05";
logging-data="1149473"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/mkN9KByNFjlq3iD4+ur1t"
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:C/iSnY6cU0kzPApA5j6A3drmJc8=
sha1:mFHRgezLZiVAuuuUBuONDmgU6YI=
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:
>> [...]
>>
>>> Trailing commas in argument lists and/or parameter lists
>>> could be accepted as an extension, even without giving a
>>> diagnostic as I read the C standard, but implementations
>>> are certainly within their rights to reject them.
>>
>> I believe a diagnotic is required.
>>
>> C17 5.1.1.3:
>>
>> A conforming implementation shall produce at least one
>> diagnostic message (identified in an implementation-defined
>> manner) if a preprocessing translation unit or translation
>> unit contains a violation of any syntax rule or constraint,
>> even if the behavior is also explicitly specified as undefined
>> or implementation-defined.
>>
>> A trailing comma on an argument or parameter list is a violation
>> of a syntax rule.
>
> I believe a diagnostic is not required, because the C standard
> explicitly allows extensions. If such diagnostics were required
> even for constructions that are part of extensions, then there is no
> reason to allow extensions, because whatever behavior is desired
> could be done anyway, under the freedom granted by undefined
> behavior. It would be stupid to explicitly grant permission to do
> something if it could be done anyway without the permission. And
> the people who wrote the C standard are not stupid.
I believe that the fact that a conforming implementation provides an
extension does not relieve it of its responsibility to diagnose syntax
errors and constraint violations.
The authors of both gcc and clang appear to agree. A concrete example:
gcc has an extension (which clang also provides) allowing the middle
operand of a conditional operator to be omitted, so that `x ? : y` is
equivalent to `x ? x : y`, except that x is evaluated only once.
By default, use of this extension (which would be a syntax
error if the extension did not exist) is not diagnosed; neither
compiler is conforming by default. With "-std=c17 -pedantic" or
"-std=c17 -pedantic-errors", both issue a warning or error message,
respectively.
--
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */