C++ libSDL2main.a的目的是什么?

C++ libSDL2main.a的目的是什么?,c++,c,linker,sdl,sdl-2,C++,C,Linker,Sdl,Sdl 2,一些消息来源称,在构建SDL2程序时,将-lSDL2main.a作为要链接的文件之一,但有些消息来源没有。无论哪种情况,该程序都可以正常工作。它的用途是什么?它的目的是使所有平台上的入口点相同-intmain(intargc,char**argv),带有UTF8编码的参数。虽然在linux(SDLmain不存在或不为空)上是如此,但其他目标系统可能遵循不同的方案 例如,windows程序可能有不同的入口点-main,WinMain,wmain。使用SDLmain,您不需要以不同的方式处理它-只需

一些消息来源称,在构建SDL2程序时,将
-lSDL2main.a
作为要链接的文件之一,但有些消息来源没有。无论哪种情况,该程序都可以正常工作。它的用途是什么?

它的目的是使所有平台上的入口点相同-
intmain(intargc,char**argv)
,带有UTF8编码的参数。虽然在linux(SDLmain不存在或不为空)上是如此,但其他目标系统可能遵循不同的方案

例如,windows程序可能有不同的入口点-
main
WinMain
wmain
。使用SDLmain,您不需要以不同的方式处理它-只需像在其他系统上一样使用
main
(由SDL重命名为
SDL\u main

基本上,在您的代码中,它只归结为
SDL_main.h
标题中的这一行(如果包含
SDL.h
,则自动包含):

(仅适用于已实现SDLmain的系统)。它将您的
main
重命名为
SDL\u main
,并注入特定于系统的入口点(在
SDL2main
库中实现),该入口点转换参数,进行特定于平台的初始化,并调用您的
SDL\u main

这是否是一件好事值得商榷;在包含
SDL.h
之前,可以使用
#define SDL_MAIN_HANDLED
禁用此功能。在这种情况下,您可以定义自己的特定于平台的入口点,执行所有必需的初始化,但SDL要求您在调用任何其他SDL工具之前调用
SDL\u SetMainReady

因此,要回答您的问题,为什么有时使用它,有时不使用它-这是因为在某些情况下,当您已经有了“标准”
main
时,它什么也不做

#define main    SDL_main