On Tue, 24 Feb 2009 15:13:55 +0100, Tom St Denis
<tstdenis@xxxxxxxxxxxxxxxx> wrote:
Eivind LM wrote:
It does of course depend on each case whether a warning is easy to
avoid or not, and also if it warns about a real problem or not. But in
any case, a warning can help me write code that more surely will do
what I intend. For example the following code is not doing what I
intended:
#include <stdio.h>
void print(int a) { printf("%d\n", a); };
int main() { print(2.5); return 0; };
I think the problem in the code is both easy to avoid and serious, but
I get no warning with -Wall and -Wextra (g++ 4.3).
That's because it's not undefined behaviour. "default" warnings should
be for things that are not guaranteed to have a known meaning or
behaviour.
I think the warning should be part of -Wall, but I understand if you don't
agree. Anyway this is not my point. I trust someone has good reasons for
the selection of warnings included in -Wall.
My points are: "-Wall" should be renamed, and a new flag should be added
that would enable absolutely all warnings.
e.g.
int a;
if (a == 4) { ... }
Is undefined behaviour since a is unitialized.
Compiling this example with -Wall and -Wextra gives me no warning with g++
(Debian 4.3.2-1.1) 4.3.2. Installed by apt-get today from Debian
repositories.
float a;
a = 0;
if (a == 4) { ... }
Is fine, but I should also point out "4" is an integral type that is
converted to float for the purpose of the expression "a == 4" . So by
your logic, it should also generate a warning.
Yes, I would like a warning if I compare a float to an int.
I would probably not compare two floats on equality anyway, but if I
really had to, then I would write "4" as 4.0f.
Compiling the second example with -Wall and -Wextra gives me no warning
with the same compiler as above.
-Wall should really just enable every warning that has something to do
with behaviour that is not predictable.
Fine, but the name should be changed.
-Weverything would be an appropriate name for every warning.
Agree! :)
Eivind