Perché Clang/LLVM mi avverte di usare l'istruzione predefinita in un'istruzione switch in cui sono coperti tutti i casi elencati?

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

Domanda

Considera la seguente istruzione Enum e Switch:

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
    }
};

Sono un programmatore di Objective-C, ma l'ho scritto in puro C per un pubblico più ampio.

Clang/LLVM 4.1 con -veverything mi avverte sulla linea predefinita:

Etichetta predefinita in switch che copre tutti i valori di enumerazione

Ora posso capire perché questo è lì: in un mondo perfetto, gli unici valori che entrano nell'argomento theMask Sarebbe nell'Enum, quindi non è necessario alcun valore predefinito. Ma cosa succede se arriva un po 'di hack e lancia un int non inizializzato nella mia bellissima funzione? La mia funzione sarà fornita come un calo della libreria e non ho alcun controllo su ciò che potrebbe andare lì. Usando default è un modo molto pulito per gestire questo.

Perché gli dei LLVM ritengono questo comportamento indegno del loro dispositivo infernale? Dovrei precedere questo da un'istruzione if per verificare l'argomento?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top