geoff@warwick.UUCP (Geoff Rimmer) (02/18/89)
Earlier this year, Paul Hudson summarised to thsi newsgroup, the responses he got to his request for desired warnings for gcc. One thing that I didn't see mentioned was a warning that would complain like hell if you use *ANY* function (including C library functions) without giving it a function prototype beforehand. Our current version (gcc v1.32) will complain (with -Wall) if no mention whatsoever is made of the function, and rightly so. However, if the function is declared in the old style, eg. (from /usr/include/stdio.h) extern char *fgets(); gcc doesn't say a thing. The reason why I would like gcc to shout when it sees a situation like this, is because I was writing a program and used 'fgets'. Unfortunately, I accidentally swapped the first 2 parameters around, that is to say I put while (fgets(BUFSIZ,buffer,fpr)) {...} rather than while (fgets(buffer,BUFSIZ,fpr)) {...} Now, I had included <stdio.h>, so gcc knew about fgets. However in my protos.h file (where I keep a list of library functions), I had mistakenly omitted fgets(). So, the program compiled fine, but I got a segmentation fault when I ran it. If gcc would print a warning whenever it sees a function that has not been declared as a *prototype*, I would have added the missing extern fgets (char *, int, FILE *); and then on re-compilation, it would have been able to spot that the arguments were not correctly ordered. Presumably when we get full ANSI C, all the standard header files will have the prototypes and so this situation will become less common. However, it would still be very useful for converting old-style C programs to ANSI C - making sure that EVERY function you write has its own prototype. If it would be possible, I'd like to see this feature in the next version of gcc. Thanks for listening! geoff M-b M-c ------------------------------------------------------------ Geoff Rimmer, Computer Science, Warwick University, England. geoff@uk.ac.warwick.emerald "Filthy, if this is supposed to be some sort of joke..." "Then it'll be the first on the show this week!!" "Shut up, Eddie. The show's only just begun, and we've had some super laughs already." - Filthy, Rich and Catflap, 1986. ------------------------------------------------------------
geoff@warwick.UUCP (Geoff Rimmer) (02/18/89)
In article <1261@ubu.warwick.UUCP> I wrote: >If gcc would print a warning whenever it sees a function that has not >been declared as a *prototype*, I would have added the missing > > extern fgets (char *, int, FILE *); > Sorry, that should be extern char *fgets (char *, int, FILE *); Geoff
mdt@YAHI.STANFORD.EDU (Michael Tiemann) (02/20/89)
> whatsoever is made of the function, and rightly so. However, if the > function is declared in the old style, eg. (from /usr/include/stdio.h) > > extern char *fgets(); > > gcc doesn't say a thing. The GNU C++ compiler has a flag -fstrict-prototype When this option is enabled, it treats extern char *fgets (); as extern char *fgets (void); and this will complain as desired. Perhaps it would be a good idea to put that code into GNU CC. Michael
paul@UUNET.UU.NET (Paul Hudson) (02/20/89)
I added this in a provate version last year some time. I'll add it again. I'm about half-way through adding the warnings, so I may soon deliver, instead of just promising!. Paul Hudson Snail mail: Monotype ADG Email: ...!ukc!acorn!moncam!paul Science Park, paul@moncam.co.uk Milton Road, "Sun Microsysytems: Cambridge, The Company is Arrogant (TM)" CB4 4FQ