Grepping for 'case 0:' shows exactly 8 places where this warning should arise. One of those is the __hurd_fail inline in hurd.h, so that one instance probably generates the warning in many compilations.
Most of these are switches with only a few cases where it would be easy to just change them to use 'if' instead of 'switch' without complicating the code. Doing that would just avoid the question. I'm not real sure about giving an E* name to 0, since E* names are for error codes, and 0 isn't one. But OTOH for error_t 0 is certainly one of the expected values, so it makes sense to have an enum constant for it. The question is what name to use, and then whether to actually use that name or just add it to suppress the warning while still using 0 in the code. I tried GCC 4.4, and it doesn't give this warning when you use an integer literal as long as the enum has some name for that integer value. If other GCC versions do warn for 'case 0:' when some item 'foo = 0' is in the enum, someone please tell me. Assuming the warning behavior is consistent with what I've seen, my inclination is not to change the code to use a symbolic name for this. That's mostly because the obvious choices like ESUCCESS or EOK just seem wrong to me since the E* name space ought to be for actual error codes, and I can't think of a good name I'd actually want to be writing in the code. So I'm inclined to pick some name that is not very friendly to use (i.e. long and verbose), perhaps even in the _* space, and add that to the error_t enum just for the purpose of suppressing these warnings and not expect people to use it in the code. Thanks, Roland