Article View: comp.std.c
Article #4708integral types in switch expressions
From: Konrad Schwarz
Date: Fri, 26 Jan 1996 18:17
Date: Fri, 26 Jan 1996 18:17
35 lines
1351 bytes
1351 bytes
I was surprised to learn that constant pointer expressions are
not allowed in case labels and that the expression in a switch statement
must be an integral type. (The reason for the exclusion of floating point
is obvious to me). I am interested in the technical reasons for this.
Consider:
T a [] = { ... }, *b = a + sizeof a / sizeof *a, *c;
switch (c) {
case a: ...
case a + 1: ...
case a + 3: ...
default: ...
}
where T is some type.
The assignment to b has worked on all compilers I have ever tried it on
(even and especially K&R I). I take this as a strong indication of
conformance. The switch construct above is explicitly disallowed, although
there does not seem to be much difference in the expressions themselves.
I am of course aware that
switch (c - a) {
case 0: ...
case 1: ...
case 3: ...
default: ...
}
is equivalent code, but it suffers from the division needed to evaluate
c - a.
Konrad Schwarz
Technical Details
Message-ID:
<4eb5r1$b04@news.tuwien.ac.at>Path:
arc1-ca.pugleaf.net!mips.complang.tuwien.ac.at!schwarzShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!mips.complang.tuwien.ac.at!schwarz From: schwarz@mips.complang.tuwien.ac.at (Konrad Schwarz) Newsgroups: comp.std.c Subject: integral types in switch expressions Date: 26 Jan 1996 18:17:05 GMT Organization: TU Wien Sender: schwarz@a3.complang.tuwien.ac.at (Konrad Schwarz) Message-ID: <4eb5r1$b04@news.tuwien.ac.at> NNTP-Posting-Host: a3.complang.tuwien.ac.at