Perché Clang/LLVM mi avverte di usare l'istruzione predefinita in un'istruzione switch in cui sono coperti tutti i casi elencati?
https://softwareengineering.stackexchange.com/questions/179269
-
05-11-2019 - |
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