[comp.std.c] typedef-name as a parameter name

pda@litp.UUCP (Pierre DAVID) (09/14/88)

Hello C gurus !

I would like to know if these two programs are ANSI-C strictly conforming
or not.  If not, I would appreciate if someone could tell me exactly
why (I have the January 1988 draft).


----- Program A -------------------------
typedef int t1, t2 ;

void f1 (t1) ;	    /* "t1" is the parameter type */

void f2 (t2)	    /* "t2" is a parameter, hiding "t2" type definition */
int t2 ;
{
    void f3 (t1) ;  /* "f3" declaration. "t1" is the type of the parameter */
}

----- Program B -------------------------
typedef int type ;

/*
 * "f" is of type "type"
 * "f" has a parameter named "type" whose type is "type"
 */
type f (type type)
{
    return type+1 ;
}
-----------------------------------------

Thanks to all.

Pierre David
pda@litp.uucp
...!uunet!mcvax!inria!litp!pda

pda@litp.UUCP (Pierre DAVID) (09/15/88)

In article <387@litp.UUCP>, I wrote:

> I would like to know if these two programs are ANSI-C strictly conforming
> or not.  If not, I would appreciate if someone could tell me exactly
> why (I have the January 1988 draft).
> 
> typedef int t1, t2 ;
> void f1 (t1) ;
> void f2 (t2)
> int t2 ;
> {
>     void f3 (t1) ;
> }
>
> typedef int type ;
> type f (type type)
> {
>     return type+1 ;
> }


The answer is NO !

I have found the answer in paragraph 3.7.1 (Function definitions), in
"Constraints" :

	An identifier declared as a typedef name shall not be
	redeclared as a parameter.

One more C particularism...


Pierre David
pda@litp.uucp
...!uunet!mcvax!inria!litp!pda