【发布时间】:2021-07-19 02:04:52
【问题描述】:
一些消息来源说在构建 SDL2 程序时将 -lSDL2main.a 作为链接文件之一,但有些则没有。该程序在任何一种情况下都可以正常工作。有什么用?
【问题讨论】:
一些消息来源说在构建 SDL2 程序时将 -lSDL2main.a 作为链接文件之一,但有些则没有。该程序在任何一种情况下都可以正常工作。有什么用?
【问题讨论】:
其目的是使所有平台上的入口点都相同 - int main(int argc, char **argv),带有 UTF8 编码的参数。虽然如此,例如linux(其中 SDLmain 不存在或为空),其他目标系统可能遵循不同的方案。
例如,Windows 程序可能有不同的入口点 - main、WinMain、wmain。使用 SDLmain,您无需以不同方式处理它 - 只需像在其他系统上一样使用 main(由 SDL 重命名为 SDL_main)。
基本上在您的代码中,它只归结为SDL_main.h 标头中的这一行(如果您包含SDL.h,则自动包含):
#define main SDL_main
(仅在具有 SDLmain 实现的系统上)。它将您的 main 重命名为 SDL_main 并注入特定于系统的入口点(在 SDL2main 库中实现),它转换参数,进行一些特定于平台的初始化,并调用您的 SDL_main。
这是否是一件好事值得商榷;在包含SDL.h 之前,可以使用#define SDL_MAIN_HANDLED 禁用此功能。在这种情况下,您定义自己的特定于平台的入口点,执行所有必需的初始化,但 SDL 要求您在调用任何其他 SDL 内容之前调用 SDL_SetMainReady。
所以,要回答您的问题,为什么有时使用它而有时不使用它 - 之所以如此,是因为在某些情况下,当您已经拥有“标准”main 它什么都不做。
【讨论】: