锵与C语言代码:枚举值没有明确地在开关

问题描述:

我试图编译这段代码铛3.1和选项-Weverything处理:锵与C语言代码:枚举值没有明确地在开关

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

然后,编译器返回我下面的警告

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) { 
         ^

在其他地方我读过类似的错误消息和人民解决它通过添加default情况,但在这里,你可以看到它已经存在。我真的很想编译我的代码而没有一个单一的警告,当然这里不需要把这229个可能的情况。

+0

http://*.com/questions/14407282/xcode-vs-visual-studio-sdl-c,作为家伙使用Xcode中,我想后面的编译器是铛,但他确实没有确定他正在使用的选项。 – sysko

从这个链接:

http://clang-developers.42468.n3.nabble.com/Question-on-Wswitch-enum-td4025927.html

与编译(见可能的变化评论)-Weverything -Wno-switch-enum

文档为GCC: http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

-Wswitch 时发出警告开关语句枚举类型的索引,并且缺少 情况下的一个或多个的该指定码枚举。 (一个 默认标签的存在防止此警告。)的情况下标签枚举范围 以外时使用此选项也会引起警告(即使存在默认 标签)。此警告由-Wall启用。

-Wswitch-enum 每当switch语句具有枚举类型的索引并且缺少该枚举的一个或多个指定代码的 大小写时发出警告。 case标签 枚举外面当使用此选项范围也招来警告。

-Wswitch与此选项之间的唯一区别是,这个选项 给出了一个约,即使有一个默认的 标签省略的枚举代码警告。 < < <

+0

谢谢,确实解决了它。 – sysko

+0

我只是想今天这个和'-Wno-开关enum'没有工作,但'-Wno-之开关的伎俩。我想它已经改变了一点。 – David

+0

@David更新了答案以指出您的评论 – xaxxon