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 <Keith.S.Thompson+u@gmail.com> writes:
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.
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.
| Sysop: | DaiTengu |
|---|---|
| Location: | Appleton, WI |
| Users: | 1,097 |
| Nodes: | 10 (0 / 10) |
| Uptime: | 21:18:14 |
| Calls: | 14,089 |
| Files: | 187,111 |
| D/L today: |
1,325 files (441M bytes) |
| Messages: | 2,490,431 |