brandx@ihtnt.UUCP (12/06/83)
Here's another "feature" of C (run under UN*X 5.0 and 4.1BSD):
junk(j)
int j;
{
int j=3; /* duplicate declaration */
return(j);
}
main()
{
printf("<%d>\n",junk(5));
}
compiles fine and outputs:
<3>brandx@ihtnt.UUCP (12/06/83)
Sorry, I guess that isn't a bug after all. It's just confusing. The local variable j is considered to be within a block (seperate from the parameter j).
grunwald@uiuccsb.UUCP (12/09/83)
#R:ihtnt:-201000:uiuccsb:9000008:000:381
uiuccsb!grunwald Dec 9 00:04:00 1983
This makes sense.
The function decleration is defined as
function name (parameters)
decleration statements
compound-statement
I thing that each compound-statement introduces a new scope. Thus, this is
equivilent to complaining about the following return "6":
woof(j)
int j;
{
int j = 3;
{
int j = 6;
return(j);
}
return(j);
}
main()
{
printf(" = %d\n", woof(5));
}woods@hao.UUCP (Greg Woods) (12/13/83)
On our v6-hacked-to-look-like-v7 system (running on an 11/70), that "junk"
code does *not* compile. The output from our compiler is:
junk.c:4: j redeclared
junk.c:4: Declaration syntax
Just out of curiosity, I plan to try it on our VAX 11/750 running 4.1aBSD.
GREG
--
{ucbvax!hplabs | allegra!nbires | decvax!brl-bmd | harpo!seismo | ihnp4!kpno}
!hao!woodsstroyan@hp-dcd.UUCP (12/16/83)
#R:ihtnt:-201000:hp-dcd:18400004:000:250
hp-dcd!stroyan Dec 12 19:36:00 1983
That's just variable declaration on the fly.
main ()
{
junk(1);
}
junk (j)
{
int j;
j=2;
{
int j;
j=3;
{
int j;
j=4;
printf ("%d ", j);
}
printf ("%d ", j);
}
printf ("%d\n", j);
}
prints 4 3 2.
Mike Stroyan
hpfcla!stroyan