我正在使用SDL函数而不定义SDL_main.那很好吗?

Mat*_*nto 3 c++ sdl sdl-2

这是我的代码:

Lib.h

#ifdef ExportLib
    #define Lib __declspec(dllexport)
#else
    #define Lib __declspec(dllimport)
#endif
extern void Lib Launch();
Run Code Online (Sandbox Code Playgroud)

Lib.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();
}
Run Code Online (Sandbox Code Playgroud)

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

main.cpp中

#include "Lib.h"

int main() {
    Launch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

最后,我使用我的静态库编译main.cpp,而不定义SDL_main和SDL的依赖.工作正常,窗口出现.

但是真的很好吗?我失去了哪些功能呢?

jag*_*ire 5

SDL_main用于SDL的自动初始化和清理.这主要是,这样你就不需要做手工,虽然它也经过对在那里的编译平台上的窗口应用程序中正确设置了一切努力,但它是精细#defineSDL_MAIN_HANDLED之前#include荷兰国际集团SDL.h,这将防止SDL main变成宏SDL_main只需确保在您自己的代码中正确初始化并退出SDL.

如果你想确保你正在进行必要的初始化,你可以检查源代码并模拟那里的内容.

编辑:

在某些平台上,如果您不使用,SDL_Init将失败SDL_main.您可以通过SDL_SetMainReady之前调用来禁用此故障SDL_Init,但请注意这将禁用SDL的错误处理,如果您在调用后SDL_SetMainReady未正确初始化SDL,则无法获得最清晰的错误消息.

退出SDL 要简单得多(如果你不使用SDL_main,还需要完成):

只需SDL_Quit在完成SDL后拨打电话即可.这将正确关闭当前活动的任何SDL子系统.