En mi código que estoy acostumbrado a escribir Fall Back-casos por defecto que contiene afirma como la siguiente, me evitar el olvido de actualizar el interruptor en caso de que la semántica cambian¿La caja del interruptor "predeterminado" altera la optimización de la tabla de salto?
switch(mode) {
case ModeA: ... ;
case ModeB: ... ;
case .. /* many of them ... */
default: {
assert(0 && "Unknown mode!");
return ADummyValue();
}
};
Ahora me pregunto si el otoño-artificial ¿El caso predeterminado de verificación inversa interferirá con las generaciones de la tabla de salto? Imagine que "ModeA", "ModeB", etc. son consecutivos, por lo que el compilador podría optimizar en una tabla. Dado que el caso "predeterminado" contiene una declaración de "retorno" real (dado que la afirmación desaparecerá en el modo de lanzamiento y el compilador se queja acerca de una declaración de devolución faltante), parece poco probable que el compilador optimice la bifurcación por defecto.
¿Cuál es la mejor manera de manejar esto? Un amigo me recomendó que reemplazara "ADummyValue" con una desreferencia de puntero nulo, de modo que el compilador, en presencia de un comportamiento indefinido, podría omitir advertir acerca de una declaración de devolución faltante. ¿Hay mejores formas de resolver esto?
Dado el 'assert', es probablemente la mejor manera, ya sea' 'throw' o terminate' en lugar de' return'. –