Path: csiph.com!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.lang.c Subject: Re: bugprone-switch-missing-default-case Date: Wed, 22 Oct 2025 12:41:49 -0700 Organization: None to speak of Lines: 61 Message-ID: <87frbaohaa.fsf@example.invalid> References: <10da67g$3q59f$1@dont-email.me> <10da8bo$hker$1@dont-email.me> <10dag3d$jkju$1@dont-email.me> <10damv3$ku01$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Date: Wed, 22 Oct 2025 19:41:54 +0000 (UTC) Injection-Info: dont-email.me; posting-host="8b80f75fe5ebd907b779bcb9373cddf1"; logging-data="922331"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX193eOS6MiuC8WFfqqYeQB8X" User-Agent: Gnus/5.13 (Gnus v5.13) Cancel-Lock: sha1:uY8D5zBvkdgtYLxONVOp1TRJDxw= sha1:GqCXdSWZaTo+4d51fLUYTsJTaFI= Xref: csiph.com comp.lang.c:394663 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 */