Groups | Search | Server Info | Login | Register
Groups > comp.compilers > #3679
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Newsgroups | comp.compilers |
| Subject | Re: Undefined behaviour in C23 |
| Date | 2025-08-21 15:02 +0200 |
| Organization | Compilers Central |
| Message-ID | <25-08-005@comp.compilers> (permalink) |
| References | <25-08-002@comp.compilers> <25-08-003@comp.compilers> |
On 20/08/2025 20:33, Kaz Kylheku wrote: > On 2025-08-20, Martin Ward <mwardgkc@gmail.com> wrote: >> In the SEI CERT C Soding Standards we read: >> >> "According to the C Standard, Annex J, J.2 [ISO/IEC 9899:2024], >> the behavior of a program is undefined in the circumstances outlined >> in the following table." >> >> The table has 221 numbered cases and can be found here: >> >> <https://wiki.sei.cmu.edu/confluence/display/c/CC.%2BUndefined%2BBehavior> >> >> According to the C Standard Committee (paraphrasing) "You may eat >> from any tree in the garden of coding, except for any of the 221 >> trees of undefined behaviour. If you eat from any of the 221 trees >> of undefined behaviour your program may die, either immediately or at >> some unspecified time in the future, or may do absolutely anything at >> any future time. You must study the Book of the Knowledge of Defined >> and Undefined (the 758 page C23 standard document) to learn exactly >> how to recognise each of the 221 trees of undefined behaviour. >> Please pay the cashier $250.00 to purchase a copy of the Book >> of the Knowledge of Defined and Undefined". > > The list is incomplete. > Under "4. Conformance", the C standards says : """ If a "shall" or "shall not" requirement that appears outside of a constraint or runtime-constraint is violated, the behavior is undefined. Undefined behaviour is otherwise indicated in this International Standard by the words "undefined behavior" or by the omission of any explicit definition of behavior. There is no difference in emphasis among these three; they all describe "behavior that is undefined". """ So no list could ever be complete here, since anything whose behaviour is not defined in the C standards is undefined behaviour. I have always found that slightly at odds with the definition under "3. Terms, definitions, and symbols" of "behavior, upon use of a nonportable or erroneous program construct or of erroneous data, for which this International Standard imposes no requirements". In my mind, things like externally defined functions (used correctly) could be considered UB by the section 4 definitions but not by the section 3 definitions. > > All platform specific headers and functions are effectively documented > extensions replacing undefined behavior, which another impelmentation could > neglect to define, or define arbitrarily (including in evil ways). > > Once you grok the fact that almost real work in C takes place via undefined > behavior (very few programs are maximally portable and strictly conforming) you > stop sweating it. > Yes, indeed - though that is the "section 4" type of UB rather than the "section 3" definition - erroneous code and data should of course be avoided at all times. People who think UB is a bad thing should spend a little time thinking about the phrase "garbage in, garbage out". If you write nonsensical code, or give sensible code nonsensical data, you can't expect sensible results. This has been known since the dawn of programmable computers (and comes from mathematics and the domains of functions): """ On two occasions I have been asked, – "Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?" ... I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question """ UB (both definitions) is an essential part of all programming languages - after all, if you have a bug in your code, you have UB, and no programming language has made it impossible to write bugs in your code. C just has some things that are undefined in C but defined in some other languages, and it is a bit more open and honest about UB than many language definitions.
Back to comp.compilers | Previous | Next — Previous in thread | Next in thread | Find similar
Undefined behaviour in C23 Martin Ward <mwardgkc@gmail.com> - 2025-08-20 14:06 +0100
Re: Undefined behaviour in C23 Kaz Kylheku <643-408-1753@kylheku.com> - 2025-08-20 18:33 +0000
Re: Undefined behaviour in C23 David Brown <david.brown@hesbynett.no> - 2025-08-21 15:02 +0200
Re: Undefined behaviour in C23 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2025-08-21 12:53 -0700
Re: Undefined behaviour in C23 David Brown <david.brown@hesbynett.no> - 2025-08-22 17:58 +0200
Re: Undefined behaviour in C23 anton@mips.complang.tuwien.ac.at - 2025-08-22 17:16 +0000
Re: Undefined behaviour in C23 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2025-08-22 15:11 -0700
Re: Undefined behaviour in C23 David Brown <david.brown@hesbynett.no> - 2025-08-23 16:55 +0200
Re: Undefined behaviour in C23 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2025-08-23 15:58 -0700
Re: Undefined behaviour in C23 James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-08-25 22:13 -0400
Re: Undefined behaviour in C23 James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-08-26 13:41 -0400
Re: Undefined behaviour in C23 Michael S <already5chosen@yahoo.com.dmarc.email> - 2025-08-26 22:28 +0300
Re: Undefined behaviour in C23 James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-08-26 16:53 -0400
Re: Undefined behaviour in C23 anton@mips.complang.tuwien.ac.at - 2025-08-21 05:44 +0000
Re: Undefined behaviour in C23 David Brown <david.brown@hesbynett.no> - 2025-08-22 18:42 +0200
Re: Undefined behaviour in C23 anton@mips.complang.tuwien.ac.at - 2025-09-06 17:15 +0000
csiph-web