Path: news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Keith Thompson 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> <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> 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 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. -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com void Void(void) { Void(); } /* The recursive call of the void */