34
votes

I want to suppress specific warnings from g++. I'm aware of the -Wno-XXX flag, but I'm looking for something more specific. I want some of the warnings in -Weffc++, but not all of them. Something like what you can do with lint - disable specific messages.

Is there a built in way in gcc to do this? Do I have to write a wrapper script?

4
See this answer if you want to disable the warnings for n lines of code. - Keith Morgan
In case you are wiliiing to add it to the source code file(s) you can do the following as described here (and probably in other answers as well): codeyarns.com/2014/03/11/… - Guy Avraham

4 Answers

24
votes

Unfortunately, this feature isn't provided by g++. In VC++, you could use #pragma warning to disable some specific warnings. In gcc, the closest you can have is diagnostic pragmas, which let you enable/disable certain types of diagnostics for certain files or projects.

Edit: GCC supports pushing/popping warnings since 4.6.4 (see changelog)

12
votes

For some warnings, there is a command line switch to disable them. In order to know which switch to use, pass -fdiagnostics-show-option to gcc.

2
votes

You could just use grep -v on the output.

Depending on the warning you wish to disable, you can sometimes correct in code. E.g.:

int main()
{
  int i;
}

Generates: foo.cc:4: warning: unused variable 'i'

Whereas this does not:

#define MARKUSED(X)  ((void)(&(X)))

int main()
{
  int i;
  MARKUSED(i);
}
2
votes

pipe standard error to a filter that removes things you don't want to see. For example, this is my make file:

main.o:  main.cpp
    g++ -c -Wall main.cpp 2>&1 | grep -v Wunused-variable