home bbs files messages ]

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,403 of 243,242   
   David Brown to Janis Papanagnou   
   Re: bugprone-switch-missing-default-case   
   22 Oct 25 17:23:04   
   
   From: david.brown@hesbynett.no   
      
   On 22/10/2025 16:05, Janis Papanagnou wrote:   
   > On 22.10.2025 15:41, David Brown 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?   
   >>   
   >> Presumably you meant "without any undefined behaviour" ?  The code is   
   >> fine - if no cases match and there is no default case, execution   
   >> continues from the end of the switch statement.  Like most warnings,   
   >> this is about a possible bug in the code - not a definite one.   
   >>   
   >>>>   
   >>>> 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.   
   >>   
   >> I don't think it is normally appropriate to add a default case unless   
   >> you actually need it   
   >   
   > Yes I was saying that I want it; I "need" it once errors slip in and   
   > such a message or error log immediately clears the issue! (You might   
   > be excluding some "needs" from your repertoire of necessities, okay.)   
   >   
   >> - code that exists but can never be reached is   
   >> untestable and can be confusing to people reading the code.  But   
   >> sometimes it can be useful to add a "default : printf("Internal   
   >> error...");" for debugging, however.   
   >   
   > This printf error message or log entry is what I suggested. It isn't   
   > confusing because it even _documents_ what's the case here. Rather,   
   > a missing default leaves the reader with an unnecessary uncertainty.   
   > YMMV.   
   >   
      
   Indeed YMMV.  But when I see a printf call that says something has gone   
   horribly wrong, I wonder /how/ that could happen.  I don't put such   
   statements into my code without it being a possible execution path.  I   
   agree, of course, that a good error message here makes the code somewhat   
   self-documenting in terms of what it does.  But it does nothing to help   
   say how it happened to run.  A printf call that never runs is not free -   
   it costs in many different ways, and should not be there unless it is   
   worth those costs.   
      
   --- 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