Cette question s'adresse principalement à C/C++, mais je suppose que d'autres langages sont également concernés.
Je n'arrive pas à comprendre pourquoi on utilise encore le switch/case au lieu du if/else if. Cela ressemble beaucoup à l'utilisation de goto's, et donne le même genre de code désordonné, alors que les mêmes résultats pourraient être obtenus avec if/else if d'une manière beaucoup plus organisée.
Pourtant, je vois ces blocs assez souvent. Un endroit commun pour les trouver est près d'une boucle de message (WndProc...), alors que ce sont les endroits où ils causent le plus de dégâts : les variables sont partagées tout au long du bloc, même quand ce n'est pas approprié (et ne peuvent pas être initialisées à l'intérieur). Il faut faire très attention à ne pas laisser tomber les break, et ainsi de suite...
Personnellement, j'évite de les utiliser, et je me demande si je ne manque pas quelque chose ?
Sont-ils plus efficaces que les if/else ? Sont-elles perpétuées par la tradition ?