CTRL(X) in ANSI standard (last one I hope)
Ken Arnold%CGL
arnold at ucsfcgl.UUCP
Wed May 22 10:30:46 AEST 1985
In article <10747 at brl-tgr.ARPA> Purtill at MIT-MULTICS.ARPA (Mark Purtill) writes:
>I'm suprised no one caught me on this. When I said
>>#define CTRL(XX) ( ($XX)[0] & '\037')
>I should have said
>>#define CTRL(XX) ( (#XX)[0] & '\037')
>(ie, the $ should have been a #!!) Sorry about that...
Unless the compiler is incredibly smart, this won't work in 'case'
statements, which is rather important. Although "a"[0] is, in fact,
a constant, it is only a constant because it is a constant offset
into a *constant array*, which is a rather unusual beast. The VAX
pcc doesn't figure this out. Try this on your compiler and see if it
does:
switch (i) {
case "a"[0]:
break;
}
Actually, when you think about it, since strings are writeable, "a"[0]
is NOT a constant, since someone else might modify the string. It is
an indirection off of a constant location, but it is not a constant.
Face it. We are going to have to kill ourselves trying to work around
the standard committee's refusal to let C work the way it has been working.
I have made my opinion on this known ad nauseum, I'm sure, so I'll just
leave it alone for now...
Ken Arnold
More information about the Comp.lang.c
mailing list