From: thiago.adams@gmail.com   
      
   On 10/23/2025 4:12 AM, David Brown wrote:   
   > On 22/10/2025 20:22, Kaz Kylheku wrote:   
   >> On 2025-10-22, Thiago Adams wrote:   
   >>> On 10/22/2025 8:44 AM, Richard Harnden wrote:   
   >>> ....   
   >>>>> Your program fragment is well defined.   
   >>>>>   
   >>>>> What the poster certainly tried to express was that in case you   
   >>>>> haven't implemented a complete list of all possible cases and   
   >>>>> also not provided a 'default' to catch all non-specified cases,   
   >>>>> then you might get in troubles with your program, probably by   
   >>>>> possible oversights, future extensions, new data, and whatnot.   
   >>>>>   
   >>>>> Personally I have the habit to always define a default branch,   
   >>>>> and even if that default is impossible to reach you'll find an   
   >>>>> error message (like "internal error with unexpected value...")   
   >>>>> generated at that place.   
   >>>>>   
   >>>> Use an enum, and the compiler will warn you ...   
   >>>>   
   >>>> $ cat x.c   
   >>>> #include    
   >>>>   
   >>>> enum x {A, B, C};   
   >>>>   
   >>>> int main(void)   
   >>>> {   
   >>>> enum x x = C;   
   >>>>   
   >>>> switch (x)   
   >>>> {   
   >>>> case A:   
   >>>> printf("A\n");   
   >>>> break;   
   >>>>   
   >>>> case B:   
   >>>> printf("B\n");   
   >>>> break;   
   >>>> }   
   >>>>   
   >>>> return 0;   
   >>>> }   
   >>>>   
   >>>> $ gcc -Wall x.c   
   >>>> x.c: In function ‘main’:   
   >>>> x.c:9:9: warning: enumeration value ‘C’ not handled in switch [-   
   >>>> Wswitch]   
   >>>> 9 | switch (x)   
   >>>> | ^~~~~~   
   >>>>   
   >>>>   
   >>>   
   >>> The problem with this GCC approach is when there are many enumerators   
   >>> but only a few are used.   
   >>   
   >> The problem with the C and GCC approach is that there is no   
   >> one-size-fits all solution.   
   >>   
   >> Some switches are intended to be exhaustive, such that   
   >> missing a case is a bug.   
   >>   
   >> Some are not.   
   >>   
   >> You need an "eswitch" for the exhaustively handled enumerations, and   
   >> switch for the others.   
   >>   
   >> GCC can turn on diagnostics over ranges of a file with pragma   
   >> and there is also _Pragram, but it's all too clumsy.   
   >>   
   >   
   > The gcc approach works fine in almost all situations - use "-   
   > Wswitch=error", and add a default case if your switch is not meant to   
   > handle all enumeration values. If the default should do nothing, it's   
   > just "default: // Not all cases need handling". If the default should   
   > never happen, "default: __builtin_unreachable();" or "default:   
   > __builtin_trap();" might be appropriate.   
   >   
   >   
   >   
      
   But then instead a compiler time error (like I suggest) you leave it for   
   runtime.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|