Some small steps could have been made <i>years</i> ago.<p>For instance, getting rid of unspecified order of evaluation. Or defining a dialect of ISO C in which evaluation is strictly left to right, and making support for that optional (so then your local GCC or whatever can have -fstrict-iso-eval to turn it on).<p>Another example of &quot;small stuff&quot;: catching negative values being passed into the &lt;ctype.h&gt; functions.  Also, all the instances in the standard library where a null pointer invokes undefined behavior could be required to abort the program.<p>Some undefined behaviors cannot be made defined without a lot of overhead (like catching all out of bounds pointers).<p>However, there is a lot of &quot;low hanging fruit&quot; undefined behavior where things can be improved.