用C代码表示:在switch中没有明确处理的枚举值

sys*_*sko 5 c sdl clang

我正在尝试使用clang 3.1和选项编译此代码-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;
}
Run Code Online (Sandbox Code Playgroud)

编译器然后返回以下警告

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 ) {
                        ^
Run Code Online (Sandbox Code Playgroud)

在其他地方,我已经阅读了类似的错误消息,人们通过添加default案例来解决它,但在这里,你可以看到它已经存在.我真的想在没有一个警告的情况下编译我的代码,当然这里不需要放置229个可能的情况.

xax*_*xon 12

从这个链接:

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

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

海湾合作委员会的文件:http: //gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

-Wswitch只要switch语句具有枚举类型的索引并且缺少该枚举的一个或多个命名代码的大小写,就会发出警告.(默认标签的存在会阻止此警告.)使用此选项时,枚举范围外的案例标签也会引发警告(即使存在默认标签).-Wall启用此警告.

-Wswitch-enum如果switch语句具有枚举类型的索引并且缺少该枚举的一个或多个命名代码的大小写,则发出警告.枚举范围之外的案例标签在使用此选项时也会引发警告.

-Wswitch和此选项之间的唯一区别是,即使存在默认标签,此选项也会提供有关省略的枚举代码的警告.<<<