You are confusing unsafe behavior with undefined behavior. He is not suggesting that a C compiler should prevent the above mistakes. He&#x27;s suggesting that it should document what code the compiler will emit in such cases. For example,<p>- reading past the end of an array will always segfault the program immediately. or reading past the end of an array will return (arrayType)0<p>- signed integer types must overflow according to two&#x27;s complement. A compiler may not assume that, for instance, (int)x &lt; (int)x + 1 is always true.<p>- uninitialized variables are zeroed out. That is, `int *x;` always produces a null pointer, `char y` always produces &#x27;0&#x27;<p>- A compiler may not remove any statements where it determines such an optimization would not change the behavior of the program. See <a href="http:&#x2F;&#x2F;www.daemonology.net&#x2F;blog&#x2F;2014-09-04-how-to-zero-a-buffer.html" rel="nofollow">http:&#x2F;&#x2F;www.daemonology.net&#x2F;blog&#x2F;2014-09-04-how-to-zero-a-buf...</a><p>Such a compiler would accept and compile any C program, and the programmer (and any static analysis tools) would have a better idea of the behavior of the output program.