Clang avec du code C: l'énumération de valeurs qui ne sont pas explicitement traitées dans le commutateur
Je suis en train de compiler ce code avec clang 3.1 et l'option -Weverything
:
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
SDL_Surface* init(SDL_Surface* screen);
int main() {
SDL_Event event;
SDL_Surface* screen = NULL;
int quit = 0;
screen = init(screen);
if (screen == NULL) {
return EXIT_FAILURE;
}
while(quit == 0) {
while(SDL_PollEvent(&event)) {
if( event.type == SDL_QUIT ) {
quit = 1;
} else if( event.type == SDL_KEYDOWN ) {
switch( event.key.keysym.sym ) {
case SDLK_UP: printf("up\n"); break;
case SDLK_DOWN: printf("down\n"); break;
case SDLK_LEFT: printf("left\n"); break;
case SDLK_RIGHT: printf("right\n"); break;
default: break;
}
}
}
}
SDL_FreeSurface(screen);
SDL_Quit();
return 0;
}
SDL_Surface* init(SDL_Surface* screen) {
if( SDL_Init(SDL_INIT_EVERYTHING) == -1) {
return NULL;
}
screen=SDL_SetVideoMode(100,100,32,SDL_SWSURFACE);
return screen;
}
Le compilateur puis me renvoie le message d'avertissement suivant
main.c:22:25: warning: 229 enumeration values not explicitly handled in switch: 'SDLK_UNKNOWN', 'SDLK_BACKSPACE',
'SDLK_TAB'... [-Wswitch-enum]
switch( event.key.keysym.sym ) {
^
Ailleurs j'ai lu des messages d'erreur similaires et les gens résolu par l'ajout de la default
cas, mais ici, comme vous pouvez le voir, il est déjà là. Je tiens vraiment à compiler mon code sans un seul avertissement, et bien sûr ici, sans avoir besoin de faire l'229 cas possibles.
stackoverflow.com/questions/14407282/... , comme le gars est à l'aide de Xcode, je suppose que le compilateur derrière est clang, mais c'est vrai qu'il n'a pas précis des options dont il a été l'utilisation.
OriginalL'auteur sysko | 2013-05-19
Vous devez vous connecter pour publier un commentaire.
À partir de ce lien:
http://clang-developers.42468.n3.nabble.com/Question-on-Wswitch-enum-td4025927.html
compiler (voir les commentaires pour le changement possible)
-Weverything -Wno-switch-enum
Docs pour GCC:
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
-Wswitch
Avertir à chaque fois qu'une instruction switch a un index de type énuméré et manque de
cas pour l'un ou plusieurs des codes de cette énumération. (La présence d'un
étiquette par défaut empêche de cet avertissement.) si les étiquettes à l'extérieur de l'énumération de gamme
également provoquer des avertissements lorsque cette option est utilisée (même si il y a un défaut
étiquette). Cet avertissement est activé par -Mur.
-Wswitch-enum
Avertir à chaque fois qu'une instruction switch a un index de type énuméré et manque de
cas pour l'un ou plusieurs des codes de cette énumération. si les étiquettes
en dehors de l'énumération de gamme également provoquer des avertissements lorsque cette option est utilisée.
J'ai juste essayé aujourd'hui et
-Wno-switch-enum
ne fonctionne pas, mais-Wno-switch
a fait le tour. Je suppose que ça a été changé un peu.mise à jour de la réponse au point de votre commentaire
OriginalL'auteur xaxxon