Le 13/03/2011 02:38, Lex Trotman a écrit :
On 13 March 2011 09:34, Colomban Wendling lists.ban@herbesfolles.org wrote:
[...]
- -Warray-bounds: warns about some out-of-bound array subscripting
- -Wformat: warns about wrong format/arguments in printf-like functions
- -Wimplicit-int: warns if the return type of a function is not missing
Actually warns when the function type IS missing, but know what you mean :-)
Woops! I must have reworded my sentence incorrectly :D
[...]
All of these but -Wpointer-arith, -Wshadow, -Wundef and -Wwrite-strings are part of GCC's -Wall. Maybe we might directly use -Wall, but it warns about some things that are not really needed, such as unused functions.
Actually, apart -Wwrite-strings, these flags don't show so much warnings :)
So (once again), do these flags seems reasonable to you?
Well if they are warnings only, the more the merrier, I'd use -Wall and -Wextras but noting that there is a possibility that some plugin might need a customised list if there is a good reason why it is correct and can't reasonably avoid some warning. Up to the plugin dev to tell us why, but hey we're reasonable aren't we? :-)
The problem of -Wextra is that it adds -Wunused-parameter, which is a bit annoying when writing callbacks (you get tons of them, and you don't have to fix them). But it adds some cool stuff too (for example -Wmissing-parameter-type and -Wold-style-declaration). Maybe we would like to use -Wall -Wextra -Wno-unused-parameter, or only pick the warning we like from -Wextra.
I don't think we should add too much warnings with false-positive (like -Wunused-parameter) by default, because they are likely to: * make the unexperienced programmer try to fix them, though actually they shouldn't be [1]; * "hide" some more interesting warnings between plenty of false ones; * annoy some developers without good reason.
Note most developers compile Geany itself with -Wall at least (iaw the Hacking file) and Nick has some extras he likes.
Of course -- I personally use the following for all my builds: :D -Wall -W -Wunused -Wunreachable-code -Wformat=2 -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wconversion -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wnested-externs -pedantic -Werror-implicit-function-declaration -fshow-column
But these are maybe a little too much, they usually generate a bunch of warnings that should not be "fixed" since they are false-positive actually.
Also note that some warnings need at least -O2 so the compiler does the dataflow tracing needed to detect the warning.
Right, but -O2 also have some drawbacks when debugging, so I'm not sure we want to add it by default.
PS we are only talking about gcc flags here but I think we only supprt gcc even on Windows, right Enrico?
Actually I check whether the compiler understand each flag, so it would be easy to support any compiler. I only talk about GCC warnings because I only know GCC's flags, but if somebody knows some other, we might add them.
Cheers, Colomban
[1] for example, hiding an unused parameter warning by faking a usage (like "(void)param") generally only bloats the code without any benefit