Path: utzoo!utgpu!tmsoft!dptcdc!dpmizar!swrinde!cs.utexas.edu!rutgers!deimos!uxc!uxc.cso.uiuc.edu!uxg.cso.uiuc.edu!uicsrd.csrd.uiuc.edu!mcdaniel From: mcdaniel@uicsrd.csrd.uiuc.edu Newsgroups: comp.std.c Subject: Re: A Little Quibble Message-ID: <25200002@uicsrd.csrd.uiuc.edu> Date: 8 Dec 88 23:01:00 GMT References: <25200001@uicsrd.csrd.uiuc.edu> Lines: 46 Nf-ID: #R:uicsrd.csrd.uiuc.edu:25200001:uicsrd.csrd.uiuc.edu:25200002:000:1196 Nf-From: uicsrd.csrd.uiuc.edu!mcdaniel Dec 8 17:01:00 1988 Please excuse more of my quibbling . . . Is the program below legal under dpANS? Is it guaranteed to output 1? #include int a = 1; main() { int a = 2; /* Y */ { extern int a; /* Z */ printf("%d\n", a); } } On the VAX BSD 4.3 compiler, it complaints about line Z (redeclaration of a). If line Y is changed to "extern int a;", though, it compiles fine. What if I change line Z to "extern const int a;"? About my base note's program (here reprinted) #include main() { int a; a = 1; { int a = a; printf("a=%d\n", a); } exit(0); } The BSD 4.3 compiler apparently evaluates the right-hand side of int a = a; in the context of the current block (as if it were int a; a = a; ); this program does not output "1". -- Tim, the Bizarre and Oddly-Dressed Enchanter Center for ||| Internet, BITNET: mcdaniel@uicsrd.csrd.uiuc.edu Supercomputing ||| UUCP: {uunet,convex,pur-ee}!uiucuxc!uicsrd!mcdaniel Research and ||| ARPANET: mcdaniel%uicsrd@uxc.cso.uiuc.edu Development, ||| CSNET: mcdaniel%uicsrd@uiuc.csnet U of Illinois ||| DECnet: GARCON::"mcdaniel@uicsrd.csrd.uiuc.edu"