logo       

c correction (was: cloning/invocation): msg#01348

lang.smalltalk.squeak.general

Subject: c correction (was: cloning/invocation)

I wrote:

> You have to properly initialize the stack frame. How do you do that?
> By copying some values from the code or some other area.
>
> int foo ( char c ) {
> int count = 0; max = 99;
>
> while ( count < max ) { .... }
> }
>
> Some initial code in "foo" must copy 0 and 99 to the right places on
> the stack.

Most people on this list probably aren't interested in the fine details
of C semantics, but after I sent the above it started to look strange
to me so I made a quick test and found I was wrong.

For dynamic variables, initializer expressions are just a short hand for
code to execute the implied assignment and the expression is *not*
evaluated at compile time. So

int gg = 12;

void foo() { int total = gg*2; ...... }

main() { foo(); gg = 45; foo(); ... }

will use the value of "gg" at the time foo is invoked, unlike what I had
stated. What I wrote is correct for static variables, so this is a case
of same syntax but two different semantics. I guess this makes sense in
practice as we could "#define gg 12" to get the effect of evaluating
the expression at compile time.

-- Jecel




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise