Deutsch English Français Italiano |
<20250409132618.11@kylheku.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: Kaz Kylheku <643-408-1753@kylheku.com> Newsgroups: comp.lang.c Subject: Re: "A diagram of C23 basic types" Date: Wed, 9 Apr 2025 20:38:03 -0000 (UTC) Organization: A noiseless patient Spider Lines: 62 Message-ID: <20250409132618.11@kylheku.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> Injection-Date: Wed, 09 Apr 2025 22:38:03 +0200 (CEST) Injection-Info: dont-email.me; posting-host="b6338aaa8cf77c0ab038d735b08c2473"; logging-data="1477112"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+DTXTZuYVftHJd/BGx7EH7hYvC0PN0XnE=" User-Agent: slrn/pre1.0.4-9 (Linux) Cancel-Lock: sha1:CEn9MnL7yrb3dd5Qcdy9ibOgN3Y= Bytes: 3139 On 2025-04-09, Michael S <already5chosen@yahoo.com> wrote: > void foo(void) { > bar(1,); > } > > MSVC: > comma.c(3): error C2059: syntax error: ')' In a language without preprocessing, it might be acceptable. If bar happens to be #define bar(x, y) then you are passing an empty argument for y. Or, suppose you have bar(ABC, DEF), where ABC and DEF are macros. DEF happens to expand to nothing, so we get bar(whatever,), and since bar takes one argument, it works silently. (Consider C++ where we can have bar(arg) and bar(arg, arg) overloads.) Just little bits of chaos that point to "bad idea". > But is it (rejection) really required by the Standard? I don't know. Yes? 6.5.3 Postfix operators 6.5.3.1 General Syntax postfix-expression: primary-expression postfix-expression [ expression ] postfix-expression ( argument-expression-list_opt ) postfix-expression . identifier postfix-expression -> identifier postfix-expression ++ postfix-expression -- compound-literal argument-expression-list: assignment-expression argument-expression-list , assignment-expression ^^ ^^^^^^^^^^^^^^^^^^^^^ You see that last bit? The grammar for argument expression lists is essentially an expression grammar in which the comma is the one and only left-associative infix operator. After the comma, the assignment-expression operand is not optional, the same way that in an infix expression E1 + E2, the E2 is not optional. -- TXR Programming Language: http://nongnu.org/txr Cygnal: Cygwin Native Application Library: http://kylheku.com/cygnal Mastodon: @Kazinator@mstdn.ca