[vox-tech] gcc and quieting warnings

Peter Jay Salzman p at dirac.org
Sun Jun 4 06:29:36 PDT 2006


On Sat 03 Jun 06, 10:56 PM, Ken Bloom <kbloom at gmail.com> said:
> On Friday 02 June 2006 10:53, Peter Jay Salzman wrote:
> > I always use -W -Wall when I compile code.  However, sometimes, I
> > want gcc to ignore certain instances of a warning.  For example, in
> > something like a stub function, or a signal callback, or even an API
> > function that doesn't use all the parameters, like:
> >
> >    JNIEXPORT void JNICALL
> >    Java_HelloWorld_print( JNIEnv *env, jobject obj )
> >    {
> >       printf("Hello World!\n");
> >       return;
> >    }
> >
> > gcc of course complains about unused parameters.  Of course, I
> > *could* simply not use -W -Wall, but I don't want to NOT use -W -Wall
> > just because I haven't gotten around to finishing a stub function. 
> > Besides, active development is the best time to turn on compiler
> > warnings.
> >
> > I also assume there's a gcc -Wfno-unused-parameter (or something
> > similar to this).  But again, I don't want to turn off the check for
> > the entire program just because of one or two functions.
> >
> > In splint/lclint/lint, "annotations" are used to shut the checker up
> > for cases where you don't want it to check a semantic.  I don't know
> > the exact syntax, but it looks something like:
> >
> >    FILE *fp;
> >    if ( (fp = fopen("foo", "r")) != NULL )
> >       f( fp );
> >    fclose( fp );  /* @NO NULL CHECK@ */
> >
> > and splint won't complain about the fact that fp may become
> > uninitialized or corrupt after passing passing it to f().  The
> > annotations are what make splint even remotely useful, otherwise I'd
> > be reading warnings all day long.
> >
> > Does gcc have something similar?  Some way of telling the compiler to
> > ignore a certain type of warning at a certain point in the code?
> >
> > I tried doing a search for "annotation" in the behemoth gcc info
> > page, but no dice.  I wouldn't know what else to call it.
> 
> What version of G++ are you using?
> 
> [bloom at cat-in-the-hat ~]$ g++ --version
> g++ (GCC) 4.0.4 20060507 (prerelease) (Debian 4.0.3-3)
> Copyright (C) 2006 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There is 
> NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR 
> PURPOSE.
> 
> [bloom at cat-in-the-hat ~]$ cat test.cpp
> void foo(int a){
> 
> }
> 
> int main(){
>    foo(1);
>    return 0;
> }
> [bloom at cat-in-the-hat ~]$ g++ -Wall -o test test.cpp
> [bloom at cat-in-the-hat ~]$ g++ -Wall -Wunused -o test test.cpp
> [bloom at cat-in-the-hat ~]$ g++ -Wall -Wunused-parameter -o test test.cpp
> test.cpp:1: warning: unused parameter ‘a’
> 
> It seems that in g++ 4.0 -Wall implies -Wunused, which in turn 
> implies -Wunused-variable -Wunused-label -Wunused-function, but does 
> not imply -Wunused-parameter.
> 
> --Ken


p at satan$ cat foo.c
void f(int env, int  obj)
{
   return;
}
p at satan$ gcc -c -W -Wall foo.c 
foo.c:1: warning: unused parameter ‘env’
foo.c:1: warning: unused parameter ‘obj’

tan$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --enable-nls
--program-suffix=-4.0 --enable-__cxa_atexit --enable-clocale=gnu
--enable-libstdcxx-debug --enable-java-awt=gtk-default --enable-gtk-cairo
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre --enable-mpfr
--disable-werror --with-tune=i686 --enable-checking=release i486-linux-gnu
Thread model: posix
gcc version 4.0.4 20060507 (prerelease) (Debian 4.0.3-3)


More information about the vox-tech mailing list