Scoping question
Keith Crews @stardent
keith at Stardent.COM
Wed Mar 7 01:24:46 AEST 1990
int ia[5];
main() {
int i = 1;
{
int *ip = &ia[i];
int i = 0;
printf("ip = 0x%x, &ia[i] = 0x%x, &ia[1] = 0x%x, i = %d\n",
ip, &ia[i], &ia[1], i);
}
{
int i = 0;
int *ip = &ia[i];
printf("ip = 0x%x, &ia[i] = 0x%x, &ia[1] = 0x%x, i = %d\n",
ip, &ia[i], &ia[1], i);
}
}
In the 2 blocks above which i should be used in calculating the value
of ip? Should it be the inner i in both cases or the outer i in the
first and the local i in the second? Is the answer the same for pcc
and ansi?
K&R section 11.1 reads "... if an identifier is explicitly declared at the
head of a block, ..., any declaration of that identifier outside the block
is suspended until the end of the block." This really does not
address what i is visible between the start of the block and the
declaration of the local i. I suspect that most compilers do what Sun's
does and use the outer i in the first case and the inner in the second case
but not all others do.
This example is simplified from some code in gcc which is like:
for (i = 0; i < X; i++) {
for (j = 0; j < Y; j++) {
MACRO(a[i], b[j]);
}
}
The intent is clear but MACRO defines its own i and at least one
compiler uses that i when calculating a[i].
--
Keith Crews Stardent Computer Inc.
95 Wells Avenue, Newton, MA 02159
More information about the Comp.lang.c
mailing list