Nettoyage de l'ancien code c/C++ qui utilisait des littéraux entiers codés en dur au lieu d'enums, il est fastidieux de trouver des endroits où la déclaration de fonction a été correctement refactorisée mais pas le corps. par exemple.Y at-il un compilateur c/C++ qui peut avertir (ou donner une erreur) ou une conversion enum en 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;
}
}
Annoter/modifier chaque type de ENUM ou à la recherche par le code pour eux serait également une bonne quantité de travail car il y a très très nombreux énumérations différentes, donc ce n'est pas préféré, mais pourrait être une solution acceptable. Je n'ai pas besoin d'être dans l'un de nos principaux compilateurs ou d'autres outils (gcc surtout) ou plate-forme (la plupart), le faire fonctionner manuellement quelques fois serait suffisant, mais je préférerais quelque chose qui n'est pas trop ésotérique ou cher.
Est-ce que gcc ne gère pas cela parfaitement? J'utilise g ++ et je vois toujours les avertissements décrits. Est-ce que le compilateur C pur se comporte différemment? – Basilevs
Non, compiler ce code (moins ... et plus vide principal()) avec: g ++ -Wall test.cpp donne 0 avertissements. La promotion d'int à enum est mise en garde, mais pas l'inverse. Si vous avez l'autre façon de travailler, donnez-moi votre ligne de commande. S'il vous plaît ... –