|
|
|
|
|
by zajio1am
680 days ago
|
|
> UB is meant to add value. It’s possible to write a language without it, so why do we have any UB at all? We do because of portability and because it gives flexibility to compilers writers. Implementation-defined behavior is here for portability for valid code. Undefined behavior is here so that compilers have leeway with handling invalid conditions (like null pointer dereference, out-of-bounds access, integer overflows, division by zero ...). What does it mean that a language does not have UBs? There are several cases how to handle invalid conditions: 1) eliminate them at compile time - this is optimal, but currently practical just for some classes of errors. 2) have consistent, well-defined behavior for them - platforms may have vastly different way how to handle invalid conditions 3) have consistent, implementation-defined behavior for them - usable for some classes of errors (integer overflow, division by zero), but for others it would add extensive runtime overhead. 4) have inconsistent behavior (UB) - C way |
|