Gradually the writers of optimizing compilers have leaned so hard on the implementation-defined and undefined behaviors that, while far from useless, C and C++ have become non-portable and dangerously insecure, as well as often very surprising to the point that the US government arguing against using them.
Thank goodness. I loved C when I encountered it, because the alternative was Z80 assembler. I loved having structs, because I was lousy at using offsets (off by one so often you'd think I would just have adjusted for being wrong).
I'll take the guardrails, please.
C: the assault rifle of programming languages...
Rik