Path: csiph.com!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.lang.c Subject: Re: This statement may fall through - how? Date: Thu, 30 Apr 2020 15:19:17 -0700 Organization: None to speak of Lines: 66 Message-ID: <87d07o62hm.fsf@nosuchdomain.example.com> References: <87imhh7pk8.fsf@nosuchdomain.example.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: reader02.eternal-september.org; posting-host="3a8562cb4f6a88758e42aeb600e70f1e"; logging-data="12030"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+jGBFz0oDrbnKrS9E8Uzp1" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) Cancel-Lock: sha1:4huUAwLpVwZgoXcPGae7cBRbicQ= sha1:VKaes38hL6d++1I5Djoo3T0zKdI= Xref: csiph.com comp.lang.c:151889 Spiros Bousbouras writes: > On Thu, 30 Apr 2020 13:29:41 -0700 > mathog wrote: [...] > I assumed that the "C++11" Keith wrote was a typo and he meant "C11". If this > really is about C++ then why are you asking here and not on comp.lang.c++ ? Yes, it was a typo (more precisely a thinko). I meant C11. (C++ has had the [[noreturn]] attribute since C++11, but I wasn't referring to that.) I'll note, however, that the article that started this thread used a command like: g++ [lots of options] fasta_formatter.cpp It's likely that the same issues apply to C, but the OP probably should have either posted to comp.lang.c++ or used a C example (which might be as simple as changing the command and file name). The rules for C and C++ *might* be different, and the behavior of gcc and g++ could very well be different. >> That said while exit() may be Noreturn in certain language versions >> >> https://en.cppreference.com/w/cpp/utility/program/exit >> >> how would shutting down the program result in a fall through to the next >> switch statement, which was the warning observed? It wouldn't. The question is whether the compiler (a) knows that and (b) is required to know that. The OP reported this error message: fasta_formatter.cpp: In function ‘void parse_command_line(int, char**)’: fasta_formatter.cpp:105:9: error: this statement may fall through [-Werror=implicit-fallthrough=] usage(); ~~~~~^~ fasta_formatter.cpp:107:3: note: here case 'i': ^~~~ Fallthough is not a constraint violation in C (nor does it violate any rule in C++), so gcc or g++ would not normally treat it as a fatal error. It can do so with certain command-line options (such as -Werror), but I didn't see any such options in the original post. I can't easily reproduce the behavior, partly because the original post did not provide a complete program (a number of #includes and declarations were missing). > As has been said , GCC does not know that the exit() in your code is the > standard exit() , it could be some other exit() which doesn't shut the > programme down. Perhaps GCC could conclude that , taking also into account > the command line options including those which get passed to the linker , but > it wouldn't be worth the trouble since you can simply put _Noreturn (I'm > guessing GCC supported something like that before it became standard). As has also been said, the compiler *can* assume that the exit function being called is the standard exit function declared in . See C11/N1570 7.1.3. -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com Working, but not speaking, for Philips Healthcare void Void(void) { Void(); } /* The recursive call of the void */