← Back to context

Comment by jolux

3 years ago

The assumption being made here is "any useful C program relies on undefined behavior" which is pretty much true.

Yes and I'm sure it's doubly true of code that was written before the C standards were written.

That sounds like a strong take - to you have examples?

Compiling with -Wall -Werror is pretty much standard those days.

  • -Wall -Werror is mostly designed to catch dangerous but totally well-defined idioms, not UB. It doesn't warn on every signed arithmetic operation or unchecked array access, for example.

  • See "useful" — it may not be not quite as strong as you're thinking. It may be possible to write a minimal C program without UB, but I'm thinking of larger programs, more than a few hundred lines. Common UB includes: array access out of bounds, dereferencing a null pointer, use after free, use of uninitialized variables. -Wall -Werror can catch some instances of some types of UB, and runtime libraries like UBSan can catch more. But they're not exhaustive.