C:优化导致SDL_QUIT为真?
我有一个奇怪的问题,我完全无法为自己找到解决办法。我正在编译一个程序,如下所示: 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没有返回错误或警告。问题在于这段代码,我认为: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
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编译: