Re: [Fwd: Re: ROOT Enhancement Request]

Masaharu Goto (gotom@hpyiddq.jpn.hp.com)
Wed, 28 May 1997 14:02:02 JST


Hello Lutz Vieweg,

The limitation below is still there. So, you'll find problem if you
declare nested block scope variable with same name.

f() {
int i;
{
double i; // this causes problem
}
}

If you use different name there is not problem.

f() {
int i;
{
double d; // this is fine
}
}

I could fix this but there are a couple of issues.

1) Convenience in interactive session
In interactive session, you use { [statements] } to give commands.
You do quite often
root[0] { TClass *p=new TClass(...); }
If cint is stringent about the block scope polisy, *p is destroyed
right at the closing '}'. So a user can't use *p in the consequitive
command line session. This is quite inconvenient. Maybe I need special
handling for the interactive session.

2) Speed
Doing strict block scoping will slow down the execution.

Change itself is mid difficulty.
I'm aware of the issue for a long time but leaving it due to above reasons.

Masaharu Goto

> Variables can be declared in global or function scope.
> Unlike ANSI, local variable has function scope. If a local variable
> is once declared in a function, it will be alive until execution gets
> out from the function even if it is declared within sub-block. In ANSI
> C, local variables have block scope.
>
> func()
> {
> int i;
> for(i=0;i<10;i++) {
> int n; /* block scope */
> printf("n=%d\n",n++);
> }
> /* n is still alive here in cint, n should be already
> dead in ANSI C */
> }
>
> If this is not true anymore, please tell me. I'm using
> local variables inside {...} inside functions _very_ often.