Fragen? Antworten! Siehe auch: Alternativlos
Nanu? Da hätte mir ja auch mal jemand Bescheid sagen können!
Letztlich muss man Code dieser Art natürlich nach wie vor vermeiden, weil man sich eben nicht darauf verlassen kann, dass nicht irgendein Language Lawyer bei irgendeinem Compiler-Hersteller so argumentiert und den Check wegoptimiert.
Das gilt für Pointer-Arithmetik und für signed int-Typen. Bei meinen Tests gerade hat übrigens auch LLVM das nicht wegoptimiert, dabei hatten die vor ein paar Jahren erst in ihrem Blog verteidigt, auf Basis von undefiniertem Verhalten in C zu optimieren.
Der wohldefinierte, sichere Weg ist übrigens, die Zeiger vor der Arithmetik zu uintptr_t zu casten.