On 2018-07-15 08:37:05 +0200, Christian Gollwitzer wrote: > Am 05.07.18 um 12:04 schrieb Steven D'Aprano: > > On Thu, 05 Jul 2018 09:17:20 +0200, Christian Gollwitzer wrote: > > But... it compiles? Seriously? [...] > > Sometimes I wonder how C programmers manage to write a bug-free "Hello > > World" program. No wonder it is described as a type-unsafe language or a > > weakly-typed language. > > Even this compiles: > > #include <stdio.h> > int main() { > int x=1; > x="This is serious"; > printf("%d\n", x); > return 0; > } > Apfelkiste:Tests chris$ gcc intx.c && ./a.out > intx.c:4:3: warning: incompatible pointer to integer conversion assigning to > 'int' from 'char [16]' [-Wint-conversion] > x="This is serious"; > ^~~~~~~~~~~~~~~~~~ > 1 warning generated. > 15294370 > > > Assignment in C to an integer will only fail when the source is a struct. > Everything else can be "converted" to an integer by the compiler.
"It compiles" is meaningless when you are talking about the language C (and not about a particular compiler). The C standard doesn't say that compilation has to terminate in case of an error. It just requires that a "conforming implementation shall produce at least one diagnostic message ... contains a violation of any syntax rule or constraint, even if the behavior is also explicitly specified as undefined or implementation-defined." (§ 5.1.1.3). Assigning a pointer to an integer is a constraint violation (§ 6.5.16.1), and the compiler produces a diagnostic message, so GCC is conforming here. A compiler which accepted a sonnet by Shakespeare, printed the message "This source code may not be valid C" and produced an executable which printed "Francis Bacon" in an infinite loop would also be conforming. > > At least it shows a warning. But hell, who pays attention to C compiler > > warnings? There's *so many of them*. > > In programs that are maintained, the warnings are typically taken seriously. > Some warnings can be annoying, e.g. warnings from generated code about > unused variables and such, but if you see a flood of warnings in regular > code, that is a sign that the code has bad quality or wasn't ever tested on > the platform you try it to compile. Right. Also, modern compilers let you turn on and off warning messages individually. So you can turn off those messages you think are useless and distracting (and maybe turn on a few additional ones). I remember a time when many compilers had "warning levels". That was really annoying, because level n always was missing a few warnings I found very useful while level n + 1 was burying me in a deluge of useless warnings. hp -- _ | Peter J. Holzer | we build much bigger, better disasters now |_|_) | | because we have much more sophisticated | | | h...@hjp.at | management tools. __/ | http://www.hjp.at/ | -- Ross Anderson <https://www.edge.org/>
signature.asc
Description: PGP signature
-- https://mail.python.org/mailman/listinfo/python-list