From: Keith.S.Thompson+u@gmail.com   
      
   David Brown writes:   
   > 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.   
      
   No, pozz meant "without any defined behavior", which is a direct quote   
   from the cited document.   
      
   That document is poorly written. The phrase "without any defined   
   behavior" strongly implies that the behavior is undefined, which is   
   simply wrong.   
      
   It says:   
      
    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.   
      
   It would be more accurate to say:   
      
    When a switch statement lacks a default case, if a value is   
    encountered that does not match any of the specified cases, the   
    switch statement will do nothing and the program will continue   
    execution without handling the value.   
      
   A warning might be warranted, but the behavior is well defined.   
      
   Note that the documentation is for the add-on tool clang-tidy, not for   
   the clang compiler.   
      
   I've submitted a bug report :   
      
   https://github.com/llvm/llvm-project/issues/164699   
      
   --   
   Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com   
   void Void(void) { Void(); } /* The recursive call of the void */   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|