jfinger@apolling (Jeff Finger) (11/16/89)
################################################################
Following is an example of a legal use of ANSI C function
prototypes -- a typedef specifying a class of functions
of identical type (including argument types).
Unfortunately, this program cannot be compiled under SR10.1.
Although Apollo's support of ANSI C is admittedly only partial, I
believe that giving an error on the program below is either a serious
bug or serious misfeature. At the worst, the compiler should give an
incorrect warning message rather than claim a type mismatch.
-- Jeff Finger --
jfinger@imagen.com
jfinger@neon.stanford.edu
################################################################
% cat fred.c
typedef short fred_fp( long );
extern fred_fp fred;
extern void main( void );
short
fred( nbytes )
long nbytes;
{
return( 37 );
}
void main()
{
short x;
x = fred( 43 );
}
#####################################################################
#
# Note that gcc 1.33 compiles it ok, but Apollo SR10.1 CC does not.
# Apollo CC's handling of typedefs does not seem to have remembered
# the formal parameter types.
#
#####################################################################
% gcc -ansi -Wall -c fred.c
% cc -v -c fred.c -g-W0,-info 1
(0009) long nbytes;
******** Line 8 of "fred.c": [Error #258] Multiple declaration of "fred".
(0017) x = fred( 43 );
******** Line 17 of "fred.c": [Warning #078] Incompatible pointer and integer operands
[x, fred] to the "=" operator.