C:优化导致SDL_QUIT为真?

时间:2014-06-13 12:29:47

标签: c gcc gdb sdl-2

我有一个奇怪的问题,我绝对找不到自己的解决方案。我按如下方式编写程序:

gcc -O2 -std=c99 -pedantic -W -Wall $(sdl2-config --cflags --libs) -lGL -o test main.c src/sdlFunc.c src/mainLoop.c src/openglFunc.c

-pendantic-Wall不会返回任何错误或警告。问题在于我认为这段代码:

while (!exitProgram) {
    while (SDL_PollEvent(&event)) {
        if (event.type == SDL_QUIT) exitProgram = 1;
        if (event.type == SDL_MOUSEBUTTONDOWN) exitProgram = 1;
    }

    if (kbState[SDL_SCANCODE_W] || kbState[SDL_SCANCODE_UP]) {
        rotation_x += 0.5;
    }

    if (kbState[SDL_SCANCODE_S] || kbState[SDL_SCANCODE_DOWN]) {
        rotation_x -= 0.5;
    }

    if (kbState[SDL_SCANCODE_A] || kbState[SDL_SCANCODE_LEFT]) {
        rotation_y += 0.5;
    }

    if (kbState[SDL_SCANCODE_D] || kbState[SDL_SCANCODE_RIGHT]) {
        rotation_y -= 0.5;
    }

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(rotation_x * 0.1, rotation_y * 0.1, rotation_x * 0.2, rotation_y * 0.2);

    createCube(0.5, rotation_x, rotation_y);

    SDL_GL_SwapWindow(screen);
}

通常这会循环,直到我按下鼠标按钮。但是,当使用-O2(或任何-O编译时)该程序无法运行。 Gdb表示程序正常退出。此外,如果我评论两个if语句,程序将无法退出并正常运行。

我必须补充说,这个循环在一个函数中运行(显然在文件 src / mainLoop.c 中),由main调用。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如上所述,我忘了正确初始化exitProgram。我想知道为什么-pendantic-Wall并没有警告我这件事。