C++ I';m在未定义SDL_main的情况下使用SDL函数。可以吗?

C++ I';m在未定义SDL_main的情况下使用SDL函数。可以吗?,c++,sdl,sdl-2,C++,Sdl,Sdl 2,这是我的密码: Lib.h 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(); } 最后,我使用静态库编译m

这是我的密码:

Lib.h

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();
}
最后,我使用静态库编译main.cpp,不需要定义SDL_main和SDL的依赖项。这很好,窗口出现了

但这真的很好吗?做这件事我失去了哪些功能?

这主要是因为你不需要手动操作,虽然它也需要在编译平台上为窗口应用程序正确设置所有内容,但它需要定义在
之前处理的宏
SDL\u MAIN\u
,包括
ing SDL.h,这将阻止SDL将
main
转换为
SDL\u main
的宏,只需确保在自己的代码中正确初始化并退出SDL即可

如果您想确保正确地进行了必要的初始化,您可以创建并模拟其中的内容

编辑:

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

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

完成SDL后给我打电话。这将正确关闭当前激活的任何SDL子系统

我使用的SDL函数没有定义SDL_main。可以吗

可能,可能不是。请改为使用,以确保:

SDL\u SetMainReady
:当不使用SDL\u main()作为入口点时,使用此函数可避免出现
SDL\u Init()
故障


在查找文档以了解我是如何错过SDL_SetMainReady之后,我在上找到了这样一条评论:“应该注意,在某些操作系统上,如果SDL_main()未被定义为程序的入口点,SDL_Init()将失败。在SDL_Init()之前调用SDL_SetMainReady()但是,用户在调用SDL_SetMainReady()时应该小心,因为不正确的初始化可能会导致崩溃和难以诊断的问题。”因此,它的使用似乎禁用了错误处理…我看到入口点是WinMain,然后调用了SDL_main。我对此感到困惑。如果没有定义SDL_main,如何将SDL编译到库中?我试图模拟这个系统,但编译器给了我一个未定义的WinMain引用。我不确定他们是如何设置这个项目的,以便它进行编译和链接的,尽管人们可能可以通过下载源代码来了解这一点。然而,我确实去看了,根据SDL论坛(SDL Development>SDL_main,2013年6月10日)上的说法,你可以在C程序中的任何地方定义main:它必须存在于某个地方,而不一定存在于你认为的二进制部分。你的结论是什么?您使用代码时是否丢失了任何功能?
#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();
}
#include "Lib.h"

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