Richard Heathfield <rjh@cpax.org.uk> writes:
On 12/05/2025 04:11, Keith Thompson wrote:
Richard Heathfield <rjh@cpax.org.uk> writes:
[...]
ALL C compilers are required to diagnose ALL syntax errors and ALLYes, all conforming C compilers are required to do that. (Well,
constraint violations.
strictly speaking they're only required to issue at least one diagnostic >>> for any translation unit that violates a syntax rule or constraint.)
I was unintentionally ambiguous, for which I apologise.
The point I sought to make is that there is no syntax error (or
constraint violation) so trivial that a compiler is given licence not
to issue a diagnostic it if it has no other reason so to do.
That is, they are all capable of ticking the box that says 'must issue
at least one diagnostic'.
[...]
In my experience, Microsoft's C compiler - although not perfect - isI wouldn't, since few if any C compilers are conforming by default.
pretty good at following conformance rules. I'd be surprised to learn
from a competent source that it misses a syntax error.
I was talking about conforming mode, which IIRC (it's been a while) is
invoked by -W4 (a warning level that I habitually used in the days
when I still used Microsoft software).
I've just tried 4 different C compilers (gcc, clang, and tcc
on Ubuntu, MS Visual Studio 2022 on Windows), and none of them
diagnosed a stray semicolon at file scope *by default*. gcc and
clang can be persuaded to diagnose it. tcc, as far as I can tell,
cannot; I don't believe it claims to be fully conforming in any mode.
I wasn't able to get MSVS to diagnose it, but there could easily
be an option that I'm missing.
Could you crank MSVS up to -W4 (or whatever the max is these days) and
try again? I hate to impose, but of course it's your own fault for
qualifying as a competent source. ;-)
It's "/W4". The default appears to be "/W3".
c:\products\source\scratch10\ctest.c(12): warning C4019: empty statement at global scope
With "/W4", or even "/Wall", it still doesn't diagnose a stray semicolon
at file scope. (I wouldn't expect a warning option to be the
incantation that makes the compiler conform to the standard.)
The "/Za" option is supposed to disable language extensions, but it
complains that "'/Za' and '/std:c17' command-line options are
incompatible".
The implementation supports both C and C++. It seems to treat C as a second-class citizen. (I think, but I'm not sure, that a stray
semicolon at file scope is legal in C++; it's called an
"empty-declaration".)
If it doesn't diagnose at its maximum warning level, then okay, ~I
lose the syntax battle.
I'd say that Microsoft's compiler loses the syntax battle.
[Remainder read and snipped]
On 12/05/2025 05:37, Keith Thompson wrote:
Richard Heathfield <rjh@cpax.org.uk> writes:
On 12/05/2025 04:11, Keith Thompson wrote:
Richard Heathfield <rjh@cpax.org.uk> writes:
[...]
ALL C compilers are required to diagnose ALL syntax errors and ALLYes, all conforming C compilers are required to do that. (Well,
constraint violations.
strictly speaking they're only required to issue at least one diagnostic >>>> for any translation unit that violates a syntax rule or constraint.)
I was unintentionally ambiguous, for which I apologise.
The point I sought to make is that there is no syntax error (or
constraint violation) so trivial that a compiler is given licence not
to issue a diagnostic it if it has no other reason so to do.
That is, they are all capable of ticking the box that says 'must issue
at least one diagnostic'.
[...]
In my experience, Microsoft's C compiler - although not perfect - is >>>>> pretty good at following conformance rules. I'd be surprised to learn >>>>> from a competent source that it misses a syntax error.I wouldn't, since few if any C compilers are conforming by default.
I was talking about conforming mode, which IIRC (it's been a while) is
invoked by -W4 (a warning level that I habitually used in the days
when I still used Microsoft software).
I've just tried 4 different C compilers (gcc, clang, and tcc
on Ubuntu, MS Visual Studio 2022 on Windows), and none of them
diagnosed a stray semicolon at file scope *by default*. gcc and
clang can be persuaded to diagnose it. tcc, as far as I can tell,
cannot; I don't believe it claims to be fully conforming in any mode.
I wasn't able to get MSVS to diagnose it, but there could easily
be an option that I'm missing.
Could you crank MSVS up to -W4 (or whatever the max is these days) and
try again? I hate to impose, but of course it's your own fault for
qualifying as a competent source. ;-)
It's "/W4". The default appears to be "/W3".
At W4 or Wall I get a messages such as: 1>c:\products\source\scratch10\ctest.c(8): warning C4019: empty statement at global scope
c:\products\source\scratch10\ctest.c(12): warning C4019: empty statement at global scope
The help for the error code:
<https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4019?view=msvc-170>
With "/W4", or even "/Wall", it still doesn't diagnose a stray semicolon
at file scope. (I wouldn't expect a warning option to be the
incantation that makes the compiler conform to the standard.)
Eh? On my system I got the above messages for stray semi-colons. I'm using VS2017.
The "/Za" option is supposed to disable language extensions, but it
complains that "'/Za' and '/std:c17' command-line options are
incompatible".
The implementation supports both C and C++. It seems to treat C as a
second-class citizen. (I think, but I'm not sure, that a stray
semicolon at file scope is legal in C++; it's called an
"empty-declaration".)
If it doesn't diagnose at its maximum warning level, then okay, ~I
lose the syntax battle.
I'd say that Microsoft's compiler loses the syntax battle.
[Remainder read and snipped]
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 546 |
Nodes: | 16 (2 / 14) |
Uptime: | 01:10:03 |
Calls: | 10,385 |
Calls today: | 2 |
Files: | 14,057 |
Messages: | 6,416,577 |