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.