锵与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个可能的情况。
答
从这个链接:
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与此选项之间的唯一区别是,这个选项 给出了一个约,即使有一个默认的 标签省略的枚举代码警告。 < < <
http://*.com/questions/14407282/xcode-vs-visual-studio-sdl-c,作为家伙使用Xcode中,我想后面的编译器是铛,但他确实没有确定他正在使用的选项。 – sysko