Path: csiph.com!eternal-september.org!feeder.eternal-september.org!nntp.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch
Newsgroups: comp.lang.c
Subject: Re: "A diagram of C23 basic types"
Date: Mon, 02 Feb 2026 09:34:26 -0800
Organization: A noiseless patient Spider
Lines: 65
Message-ID: <86pl6njbh9.fsf@linuxsc.com>
References: <87y0wjaysg.fsf@gmail.com> <20250402220614.431@kylheku.com> <85mscxlqnb.fsf@nosuchdomain.example.com> <20250403121946.134@kylheku.com> <20250409124900.00000fa1@yahoo.com> <861pu1ccsg.fsf@linuxsc.com> <87a58pq9ig.fsf@nosuchdomain.example.com> <865xj79khz.fsf@linuxsc.com> <875xj73sqx.fsf@nosuchdomain.example.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Mon, 02 Feb 2026 17:34:29 +0000 (UTC)
Injection-Info: dont-email.me; posting-host="1063cc7e7fc133248ec46c88b22d0740"; logging-data="838664"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18EJAUgrE+oGRrLuFynLP57hQa6rbCUA90="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:eNiXu5K8queqphbg+c9LtnnC4PE= sha1:Ajtmoyo8KcS0RfWYZ7+87dD2Q18=
Xref: csiph.com comp.lang.c:396558
Keith Thompson writes:
> Tim Rentsch writes:
>
>> Keith Thompson writes:
>>
>>> Tim Rentsch 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.
Your logic is bad. First the diagnostics are produced only because
you have asked them to be produced by giving the -pedantic option.
Second there are other cases where diagnostics are not given even
with -pedantic. Third the statement that without -pedantic the
compilers are not conforming does not mean that their behavior in
any particular case is not conforming; the argument implicitly uses
circular logic, using the non-issuance of a diagnostic to imply that
the compilers are not conforming, but whether a conforming
implmentation must issue a diagnostic is the question being
considered.
It doesn't make sense for the C standard to include a statement that
extensions are allowed if they would be allowed anyway.