Considera la seguente enumerazione e la seguente dichiarazione:
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 Objective-C, ma l'ho scritto in puro C per un pubblico più ampio.
Clang / LLVM 4.1 with -Wissything mi avverte sulla linea predefinita:
Default label in switch which covers all enumeration values
Ora, posso capire perché questo è lì: in un mondo perfetto, gli unici valori che entrano nell'argomento theMask
sarebbero nell'enumerazione, quindi non è necessario alcun valore predefinito. Ma cosa succede se qualche hack arriva e getta un int non inizializzato nella mia bella funzione? La mia funzione sarà fornita come una goccia in biblioteca, e non ho il controllo su cosa potrebbe andare lì dentro. L'utilizzo di default
è un modo molto accurato per gestirlo.
Perché gli dei LLVM ritengono questo comportamento indegno del loro dispositivo infernale? Dovrei precederlo con un'istruzione if per verificare l'argomento?