Re: doubt about "switch" - default case in af_inet.c

From: Bill Davidsen
Date: Thu Dec 16 2004 - 13:44:01 EST


Phani Kandula wrote:
Hi all,

I'm a newbie to the Linux. I'm using 2.6.8 kernel. In /usr/src/linux/net/ipv4/af_inet.c I came across this...
<code>
switch (sock->state) {
default:
//do something..
goto out;
case SS_CONNECTED:
//do something..
goto out;
case SS_CONNECTING:
//do something..
break;
case SS_UNCONNECTED:
//do something..
break;
}
</code>

Is there any advantage in having 'default' as the first case? My understanding is that it will be useful only when 'default' is the
most likely case (in general).

Even then, my doubt: How will compiler (say gcc) implement 'default'
as the first value? Program is supposed to see all the cases and then
decide 'default'. Is this correct?

So, is this the best way to do it? please clarify..

Just so. The compiler will check some or all of the cases first, and then take the default case. If you look at the code with and without optimization (use -S) you will see that it behaves the same way regardless of the placement of the default case. There is one exception, that is the one where control falls through from one case to another, and the default case is not last and lacks a break, such that the default winds up executing the code from the case(s) following.

Do I have to say that the code doing stuff like that is hard to read?

--
-bill davidsen (davidsen@xxxxxxx)
"The secret to procrastination is to put things off until the
last possible moment - but no longer" -me
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/