SDL_Init 的作用
很多情况下不调用SDL_Init也没出问题,那么SDL_Init有啥用呢?
SDL_Init 初始化了 SDL 的子系统.事实上,它只是转发到 SDL_InitSubSystem
int
SDL_Init(Uint32 flags)
{
return SDL_InitSubSystem(flags);
}
现在,如果您不调用 SDL_Init 或 SDL_InitSubSystem 但在使用子系统时没有遇到任何问题,那么您可能只是幸运.通过查看 SDL 源代码,您可能会发现很多函数在使用资源之前都会检查是否已初始化,并在可能的情况下进行初始化.例如,SDL_GetTicks 在需要时调用 SDL_TicksInit
Uint32
SDL_GetTicks(void)
{
// [...]
if (!ticks_started) {
SDL_TicksInit();
}
// [...]
}
同样,SDL_CreateWindow 会在需要时调用 SDL_VideoInit
SDL_Window *
SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
{
// [...]
if (!_this) {
/* Initialize the video system if needed */
if (SDL_VideoInit(NULL) < 0) {
return NULL;
}
}
// [...]
}
问题是,有一天你可能会因为某些东西没有被初始化而遇到一个错误,你将无法轻松找到原因.简而言之,初始化您使用的子系统.它不会花费您任何费用,而且可能会为您省去很多麻烦.
本文详细解释了SDL_Init函数的作用,即初始化SDL子系统。虽然有些情况下即使不调用该函数也能正常运行,但为了确保程序的稳定性和避免未来可能出现的问题,作者建议在使用相应子系统前主动调用初始化。

1040

被折叠的 条评论
为什么被折叠?



