Date: Mon, 26 Jan 1998 18:51:10 +1030 From: Greg Lehey <grog@lemis.com> To: Brian Reichert <reichert@numachi.com> Cc: freebsd-questions@FreeBSD.ORG Subject: Re: gcc -Wall wierdness? Message-ID: <19980126185110.07585@lemis.com> In-Reply-To: <19980126023315.47723@numachi.com>; from Brian Reichert on Mon, Jan 26, 1998 at 02:33:15AM -0500 References: <19980126023315.47723@numachi.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jan 26, 1998 at 02:33:15AM -0500, Brian Reichert wrote: > Howdy- > > I'm running 2.2.2-R, with gcc 2.7.2.1, and am getting a weird symptom: > > With this simple program: > > --------------------------------- > #include <stdio.h> > #include <string.h> > > void main () > { > printf("read failed: %s\n", strerror[0]); >> > --------------------------------- > > gcc -Wall yields, upon compiling: > > foo.c: In function `main': > foo.c:6: warning: char format, different type arg (arg 2) > > So, what gives? strerror(3) says to pull in <string.h>, which > seems to prototype it as char *. Is this a GNU bad, or has FreeBSD > done something clever, or (horrors) am I missing the point entirely? Assuming that's really the program, you're missing the point. You're using the function as an array (strerror [0] instead of strerror (0)). I don't know why gcc didn't complain about that, but maybe it's legal (strerror [0] = *sterror). What I don't understand is how you can subscript a scalar function. The assembler output indicates that it's just using the address of the function: LC0: .ascii "read failed: %s\12\0" .align 2 .globl _main .type _main,@function _main: pushl %ebp movl %esp,%ebp call ___main pushl $_strerror ; 2nd parm: address of strerror pushl $LC0 ; 1st parm: format string call _printf Certainly if you change this to: printf ("read failed: %s\n", strerror (0)); things look a whole lot better. Alternatively, you could write printf ("read failed: %s\n", sys_errlist [0]); which is probably what was confusing you. Greg
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980126185110.07585>