Re: [PATCH] 2.5.21 kill warnings 4/19

Maksim (Max) Krasnyanskiy
2002-06-10T21:04:09Z

> > > wrt the __func__ thing: is it possible to do:
> > >
> > > #if (compiler version test)
> > > #define __FUNCTION__ __func__
> > > #endif
> > >
> > > to kill the 3.x warning?
> >
> > #include <stdio.h>
> > #define __FUNCTION__ __func__
> >
> > int main(int argc, char **argv) {
> > int i;
> >
> > for (i = 0; i < argc; i++) {
> > printf(__FUNCTION__ " encountered argument ");
> > printf("%s\n", argv[i]);
> > }
> >
> > exit(0);
> > }
> >
> > Obviously, yes.
>
>Nope.
>$ gcc-3.1 -Wall -o foo foo.c
>foo.c: In function `main':
>foo.c:8: parse error before string constant
>
>And line 8 is:
>printf(__FUNCTION__ " encountered argument ");

Well, those will brake. But in general it's possible. And I already do that
in Bluetooth code (it's been converted recently).

So

#if __GNUC__ <= 2 && __GNUC_MINOR__ < 95
#define __func__ __FUNCTION__
#endif

does the trick. All gcc's newer than 2.95 support __func__.

Bluetooth code compiles just fine with everything from:
ultrablue:/#sparc64-linux-gcc --version
egcs-2.92.11
to
champ:/usr/src/linux/include/net/bluetooth#gcc --version
gcc (GCC) 3.1

Max