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