¿De dónde vienen los puntos de secuencia?

Sé que escribir algo como

++a = a++;

No solo es ilegible sino que también viola los puntos de secuencia de c / c ++.

¿De dónde vienen estas limitaciones? ¿Cómo se pueden ver esos 'problemas' antes de encontrarlos como errores?