SDL 窗口不会弹出

SDL Window won't pop up

本文关键字:窗口 SDL      更新时间:2023-10-16

我的窗口不会弹出。

控制台出现,并没有打开窗口,只是说"应用程序结束">

这是我的代码:

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_image.h>
#include <windows.h>
using namespace std;
SDL_Window * okno;
SDL_Surface * ekran;
SDL_Event zdarzenie;
int frame = 0;
int main(int argc, char*args[])
{
SDL_Init(SDL_INIT_EVERYTHING);
return 0;
okno = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, NULL);
ekran = SDL_GetWindowSurface(okno);
}

return 0;是您的错误。返回后,程序结束,因为main()结束。返回后不会执行main中的任何行。您当然不想在调用SDL_CreateWindow之前结束。

函数在返回语句后是否可以继续?

将代码更改为

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_image.h>
#include <windows.h>
using namespace std;
SDL_Window * okno;
SDL_Surface * ekran;
SDL_Event zdarzenie;
int frame = 0;
int main(int argc, char*args[])
{
SDL_Init(SDL_INIT_EVERYTHING);
okno = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, NULL);
ekran = SDL_GetWindowSurface(okno);
}

c++中返回0;可以从主体中省略。

我可以省略C中main的return吗?

此外,我希望这段代码会在许多编译器上发出警告(关于无法访问的代码(。如果它没有发出警告,您可能需要提高编译器的警告级别。如果它确实发出了警告,你需要更加注意这些警告。。

您可能还想删除全局变量,而将变量设置为main的局部变量。全局变量通常被认为是一种糟糕的做法。

全局变量坏吗?

SDL_Init()也可能失败。您可能需要检查其返回值,并在记录错误失败时退出。

if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
SDL_Log("Unable to initialize SDL: %s", SDL_GetError());
return 1;
}

https://wiki.libsdl.org/SDL_Init