Xref: news2.mv.net comp.os.msdos.djgpp:754 From: mbbad AT s-crim1 DOT dl DOT ac DOT uk (I. Badcoe) Newsgroups: comp.os.msdos.djgpp Subject: Re: v2 vs v1 C++ interpretation Date: 1 Feb 1996 10:03:19 GMT Organization: Daresbury Lab, Warrington, U.K. Lines: 73 Distribution: world Message-ID: <4eq357$ruq@mserv1.dl.ac.uk> References: <4eads7$4e6 AT trog DOT dra DOT hmg DOT gb> NNTP-Posting-Host: s-crim1.dl.ac.uk To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp itmiller AT taz DOT dra DOT hmg DOT gb wrote: : Does anyone know why the C++ function... 1 : void term(); 2 : int curr_tok = 0; 3 4 : void term() 5 : { 6 : switch (curr_tok) 7 : { 8 : case 1: 9 : double d = 3.0; 11 : break; 12 : default: 13 : return; 14 : } 15 : } Hi, I don't think this is correct code. The reason is that the variable 'd' is declared within the block starting on line 7. So it's a valid symbol anywhere in that block. In the default case of the switch, however, you pass by that declaration. So any code within the block but after that point would not know whether there was a variabel 'd' or not. You'd have to do either: 1 : void term(); 2 : int curr_tok = 0; 3 4 : void term() 5 : { 7a : double d; 6 : switch (curr_tok) 7 : { 8 : case 1: 9 : d = 3.0; 11 : break; 12 : default: 13 : return; 14 : } 15 : } which puts the variable in the scope of the whole construct, or, 1 : void term(); 2 : int curr_tok = 0; 3 4 : void term() 5 : { 6 : switch (curr_tok) 7 : { 8 : case 1: { 9 : double d = 3.0; 11 : break; 11a : } 12 : default: 13 : return; 14 : } 15 : } which definitely removes it from the scope of the 'default' code. Neither version does anything, of course ;-) Badders p.s: It shouldn't work under straight C, either ?