Subject: Re: stdio glitch
To: der Mouse <mouse@Rodents.Montreal.QC.CA>
From: James Chacon <jchacon@genuity.net>
List: tech-userlevel
Date: 07/19/2000 19:40:10
I don't have my standard handy but I believe ANSI/ISO allows most of the 
standard library functions to be wrappered as macro's like this for speeds
sake, but if you want the real funtion you'd add:

#undef ferror

after the #include to make sure the real function (with proper protyping
support) was brought into scope. i.e. the whole getc/putc macro sets.

James

>
>Is this allowed?
>
>	% cat foo.c
>	#include <stdio.h>
>	int foo(void *fvp)
>	{ return(ferror(fvp));
>	}
>	% cc -c foo.c
>	foo.c: In function `foo':
>	"foo.c", line 3: warning: dereferencing `void *' pointer
>	"foo.c", line 3: request for member `_flags' in something not a structure or union
>	% 
>
>ferror isn't *documented* as being non-function-like[%], and if it were
>a real function that would work fine (and indeed s/ferror/(ferror)/
>makes the complaint go away).
>
>[%] At least not unless you notice, follow, and carefully read the
>stdio(3) SEE ALSO.
>
>Yet just adding a cast to ferror()'s definition isn't right either;
>that allows too much instead of too little latitude.
>
>Thoughts?  Should ferror be an inline function, maybe?  Or am I being
>unreasonable in expecting stdio "functions" to act like functions?
>
>					der Mouse
>
>			       mouse@rodents.montreal.qc.ca
>		     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B
>
>
>
>