C:优化导致SDL_QUIT为真?

C:优化导致SDL_QUIT为真?,c,gcc,gdb,sdl-2,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(&a

我有一个奇怪的问题,我完全无法为自己找到解决办法。我正在编译一个程序,如下所示:

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调用的


有什么建议吗?

如某物所述,我忘了正确初始化出口程序。我想知道为什么-pendantic和-Wall没有警告我这一点。

对您的具体问题没有多大帮助,但您应该小心调用您的程序测试。我以前被咬过,因为尝试运行它时使用了shell内部测试命令:-exitProgram是否在线程之间共享?感谢您的响应。我已经考虑过了,重新命名了程序多维数据集,并再次进行了测试,但没有结果。然后,我再次使用./test运行程序。也就是说,我将记住这一点,并将输出更改为testProgram。如何知道是否使用多线程??编辑:我甚至不知道如何创建多线程程序…exitProgram是否正确初始化?建议:切换到clang并使用-weverything编译: