Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.c    |    Meh, in C you gotta define EVERYTHING    |    243,242 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 241,405 of 243,242    |
|    David Brown to Janis Papanagnou    |
|    Re: bugprone-switch-missing-default-case    |
|    22 Oct 25 17:25:42    |
   
   From: david.brown@hesbynett.no   
      
   On 22/10/2025 15:56, Janis Papanagnou wrote:   
   > On 22.10.2025 13:44, Richard Harnden wrote:   
   >> On 22/10/2025 10:32, Janis Papanagnou wrote:   
   >>> On 22.10.2025 10:56, pozz wrote:   
   >>>>   
   >>>>> Switch statements without a default case can lead to unexpected   
   >>>>> behavior and incomplete handling of all possible cases. When a switch   
   >>>>> statement lacks a default case, if a value is encountered that does   
   >>>>> not match any of the specified cases, the program will continue   
   >>>>> execution without any defined behavior or handling.   
   >>>>   
   >>>> Maybe I misunderstood that sentence caused by my bad English. I knew   
   >>>> that in case the switch value is not present in any case inside the   
   >>>> switch, the program continues without doing anything (in the switch) and   
   >>>> without any problem.   
   >>>>   
   >>>> int x = 3;   
   >>>> switch(x) {   
   >>>> case 1: printf("Hello");break;   
   >>>> case 2: printf("World");break;   
   >>>> }   
   >>>>   
   >>>> Will the program execution continue without any defined behaviour?   
   >>>   
   >>> 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 ...   
   >   
   > Maybe. Although I don't recall that the "C"-compilers I formerly   
   > used checked enums as you've shown below. - But anyway...   
   >   
   > Enums don't help if you use and compare against (for example)   
   > characters that are (for example) got from an external source.   
   >   
   > char * cmds = "CMDQ"; // 'D' maybe added later   
   > char cmd;   
   > ...some n lines of code...   
   > ...get input cmd...   
   > ...optionally verify cmd with cmds...   
   > ...some more m lines of code...   
   > switch (cmd) {   
   > case 'C': ...;   
   > case 'M': ...;   
   > default: printf ("Error: uncaught cmd '%c'\n", cmd);   
   > }   
   >   
   > It's good to take precautions and define the 'default' case. YMMV.   
   >   
      
   That's not "taking precautions". If the "...optionally verify cmd" part   
   does a good job, then the default line is worse than useless because it   
   is code that never runs. If that part doesn't exist (since it is   
   "optional"), then the default line is not "taking precautions", it is   
   normal handling of a realistic situation.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca