switch kann bei C immer nur Integer Konstanten verwenden. Diese werden vom Compiler in goto Sprungadressen umkompiliert.
Zwar tut switch im Endeffekt nicht viel anderes als if, aber if ist der mächtigere Befehl in C, denn if kann alle möglichen Bedingungen und Vergleiche verarbeiten.