[net.lang.c] ATT and function declarations

rudolph@ecr1.UUCP (rudolph) (04/12/86)

While porting some code to the 3b2 i recieved a compiler error
for some valid C code. This code compiled fine on a plexus SYS3
and an NCR TOWER SYS5. I had a routine that allocated an array of
structures and returned a pointer to it so i declared it as
a function returing a pointer to an array of structures of type foo.

eg:

struct foo {
	int	who;
	int	cares;
} 

typedef struct foo FOO;

FOO (*get_it())[];			/* compiler likes this */

FOO (*where)[];

int call_it ()
{
	where = get_it( 1 );	/* and this */
}

FOO (*get_it ( arg ))[]		/* complier complains here */
int arg;
{
	if( arg > 0 ){
		return (FOO (*)[]) malloc( arg * sizeof (FOO) );
	}else{
		return (FOO (*)[]) NULL;
	}
}

to which the 3b2 compiler said

compiler error: compiler takes sizeof function
and lint says nothing!

even when i typedefed it as in

typedef FOO (*pafoo)[];

and declare the function

pafoo get_it ( arg ) { ... }

it still complains all other combinations of typdefs also failed.
so i had to rewrite it to be FOO *get_it() .... sigh :-(

which is the way most people would do it. My question is what is
so wrong with declaring the function as above that AT&T would gag on it.

            _____====== ===__n__n____n_
           {_____[____] [#]____________}
___________o-o-o  o-o-o~o-o O=O=O=O o-o=\_________________________

Just trying to stay on the right track.