Checking future result of arithmetic where a wraparound is undesired or undefined, is a basic skill every C programmer should know.
C is not a scripting language. If you use the tools available to you, and don't abuse the language, then it is fairly hard to cause undefined behavior.
The example shown in the article is in fact undefined behavior:
6.3.2.1,p2 If the lvalue designates an object of automatic storage duration that could have been declared with the register storage class (never had its address taken), and that object is uninitialized (not declared with an initializer and no assignment to it has been performed prior to use), the behavior is undefined.
-Strawman argument.
-Appeal to authority.
Next time stick to the issue, you will find the debate will be much more rewarding for both parties.