Where did the warning go?

Eivind LM eivliste@online.no
Tue Feb 24 14:03:00 GMT 2009


On Mon, 23 Feb 2009 21:39:18 +0100, Ian Lance Taylor <iant@google.com>  
wrote:

> "Eivind LM" <eivliste@online.no> writes:
>
>> Next question: Does the -Wall flag have a long and complicated history?
>
> No, though certainly the details have changed over time.

So the flag enables a subset of all warnings, and the collection changes  
over time. Why don't the name reflect that? I think Eljay's suggested name  
"-Wselect-popular-warnings" was excellent.

>> The name indicates that it enables ... well, uh, ... *all* warnings.  
>> (Yes,
>> i should have read the docs more carefully.)
>
> As the docs say, -Wall enables all warnings which can be easily avoided
> by changing the soure code.

It is useful to have a flag like that, but the the name should really be  
something else than -Wall.

>> I would like to compile my code with absolutely as many compiler  
>> warnings
>> enabled as possible, and then selectively deactivate the ones that I
>> cannot avoid in a reasonable way.
>
> That is pretty much the goal of -Wall.
>
> The warnings which are not included in -Wall are either difficult to
> avoid in some cases or are specific to certain programming styles.

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).

Instead of adding -Wconversion (and to search for any other flags I might  
find useful, but that I don't know of yet), I would rather compile my  
project with something like "-Weverything" from the beginning, and then  
disable the warnings that turns out to not fit my programming style.

>> Is there a way to enable absolutely all? -Weverything? :)
>
> No, that would not be useful.  Nobody writes code in the intersection of
> all the programming styles supported by all the warning options.

I am sure you are right about this, so maybe -Weverything is not the right  
thing. But my point is that it is better to start off with "everything",  
and disable the ones you don't want for a given project, than to start  
with only a selected set of warnings.

Because if you are using -Wall then:
a) You don't know which warnings you are missing out on.
b) You might risk loosing a warning you were used to have (unless you are  
always reading the changelog for new gcc versions)

> We are certainly open to changing the ways that the warnings are
> aggregated into -Wall and -Wextra, including adding a new aggregation
> warning if it seems useful.  However, -Weverything is unlikely to be
> accepted.

If -Weverything is impossible, then I wish a flag that enables every  
single warning that might be relevant for my programming style. Probably  
others would want this for their programming styles too. But if there are  
too many different programming styles to have -Weverything-style-*, then  
how about having -Weverything anyway, and let people disable warnings that  
don't fit with their style?

I'm glad to hear that you are open for changes, and also very grateful  
that you took the time to reply thoroughly to my email.

Thanks,
Eivind
PS, did I mention that -Wall should be renamed? :)



More information about the Gcc-help mailing list