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?

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/179269

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

Licencié sous: CC-BY-SA avec attribution
scroll top