Limpiando el antiguo código c/C++ que usaba literales enteros codificados en lugar de enumeraciones, es tedioso encontrar lugares donde la declaración de la función se haya refactorizado correctamente pero no el cuerpo. p.ej.¿Hay algún compilador c/C++ que pueda advertir (o dar error) o conversión enum a int?
enum important {
little = 1,
abit = 2,
much = 3
};
void blah(int e)
{
// magic stuff here
}
void boing(int e) { ... }
void guck(important e)
{
switch (e) {
case 3: // this would be a good place for a warning
blah(e); // and this
break;
default:
boing((int)e); // but this is OK (although imperfect and a warning would be acceptable)
break;
}
}
Anotación/modificar cada tipo de enumeración o buscar a través del código para ellos también sería una buena cantidad de trabajo, ya que hay muy muchas enumeraciones diferentes, así que esto no es preferido, pero podría ser una solución aceptable.
No lo necesito para estar en ninguno de nuestros compiladores principales u otras herramientas (gcc en su mayoría) o plataforma (la mayoría), ejecutarlo manualmente un par de veces sería suficiente, pero preferiría algo que no es demasiado esotérico o caro.
¿No gcc maneja esto perfectamente? Estoy usando g ++ y siempre veo advertencias descritas. ¿El compilador C puro se comporta de manera diferente? – Basilevs
No, compilando este código (menos ... y más un vacío main()) con: g ++ -Wall test.cpp da 0 advertencias. La promoción de int a enum está advertida, pero no a la inversa. Si trabajas de otra manera, por favor dame tu línea de comando. por favor ... –