Pourquoi Clang / LLVM me prévient-il d'utiliser la valeur par défaut dans une instruction Switch où tous les cas énumérés sont couverts?
https://softwareengineering.stackexchange.com/questions/179269
-
05-11-2019 - |
Question
Considérez l'insuffisance énuée et commutation suivante:
typedef enum {
MaskValueUno,
MaskValueDos
} testingMask;
void myFunction(testingMask theMask) {
switch (theMask) {
case MaskValueUno: {}// deal with it
case MaskValueDos: {}// deal with it
default: {} //deal with an unexpected or uninitialized value
}
};
Je suis un programmeur objectif-C, mais je l'ai écrit dans Pure C pour un public plus large.
Clang / llvm 4.1 avec -verything m'arrête à la ligne par défaut:
Étiquette par défaut dans Switch qui couvre toutes les valeurs d'énumération
Maintenant, je peux en quelque sorte voir pourquoi c'est là: dans un monde parfait, les seules valeurs entrant dans l'argument theMask
serait dans l'énumération, donc aucune valeur par défaut n'est nécessaire. Mais que se passe-t-il si un piratage arrive et jette un int non initialisé dans ma belle fonction? Ma fonction sera fournie comme une baisse de la bibliothèque, et je n'ai aucun contrôle sur ce qui pourrait y aller. Utilisant default
est une façon très soignée de gérer cela.
Pourquoi les dieux LLVM considèrent-ils ce comportement indigne de leur appareil infernal? Dois-je être précédé par une déclaration IF pour vérifier l'argument?
Pas de solution correcte