gpt4 book ai didi

c++ - 我正在使用未定义 SDL_main 的 SDL 函数。这样好吗?

转载 作者:太空狗 更新时间:2023-10-29 20:23:14 26 4
gpt4 key购买 nike

这是我的代码:

库.h

#ifdef ExportLib
#define Lib __declspec(dllexport)
#else
#define Lib __declspec(dllimport)
#endif
extern void Lib Launch();

库.cpp

#include <SDL/SDL.h>
#include "Lib.h"
void Launch() {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* win = SDL_CreateWindow("Untitle", 100, 100, 400, 400, 0);
SDL_DestroyWindow(win);
SDL_Quit();
}

我将此代码构建到一个静态库中。然后我创建了一个新的源文件并使用了这个库。

主要.cpp

#include "Lib.h"

int main() {
Launch();
return 0;
}

最后,我使用我的静态库编译 main.cpp,没有定义 SDL_main 和 SDL 的依赖项。一切正常,窗口出现。

但是这样做真的好吗?我失去了哪些功能?

最佳答案

SDL_main is for SDL's automatic initialization and cleanup.这主要是因为您不需要手动执行此操作,尽管它还需要在编译平台上为窗口应用程序正确设置所有内容,但它是 fine#includeing SDL.h 之前#defineSDL_MAIN_HANDLED,这将阻止SDL 将main 转换为SDL_main 的宏 只需确保在您自己的代码中正确初始化和退出 SDL。

如果您想确保自己正确地进行了必要的初始化,您可以 just check the source code并模拟那里的内容。

编辑:

在某些平台上,SDL_Init will fail如果您不使用 SDL_main。您可以通过在 SDL_Init 之前调用 SDL_SetMainReady 来禁用此失败,但请注意,如果您在调用 SDL_SetMainReady 后不正确地初始化 SDL,这将禁用 SDL 的错误处理> 你不会得到最清晰的错误信息。

退出 SDL 是 much more straightforward (如果您不使用 SDL_main,也需要这样做):

只需调用 SDL_Quit当您完成 SDL 后。这将正确关闭当前处于事件状态的所有 SDL 子系统。

关于c++ - 我正在使用未定义 SDL_main 的 SDL 函数。这样好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34079288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com