为什么SDL定义主宏?(Why SDL defines main macro?)

2019-06-17 18:29发布

有一些麻烦设置SDL后,我发现SDL定义,取代主宏:

#define main SDL_main

// And then
extern C_LINKAGE int SDL_main(int argc, char *argv[]);

这也可以创建编译错误,如果主功能不具备argcargv定义的参数。

该宏给了当我看到它我只是头疼......为什么SDL需要重新确定主? 经过一番搜索多,我发现有人#undef main ,并用它的正常方式。

因此,这是一个问题: 为什么SDL需要重新定义主要的,它有什么作用? 是否有任何副作用取消定义呢?

有一两件事我注意到的是,SDL重定向标准输出和错误的文件(我不希望这种行为),如果我取消定义主这种行为停止。

Answer 1:

每对SDL的Windows常见问题解答 :

您应该使用main()代替WinMain()即使你正在创建一个Windows应用程序,因为SDL提供了一个版本WinMain()其调用主代码之前要进行一些初始化SDL。

如果由于某种原因,你需要使用WinMain()看看在SDL源代码src/main/win32/SDL_main.c是看你需要在你要做什么样的初始化WinMain()函数,以便SDL作品正常。

SDL需要初始化,所以它注入了自己的main ,调用你的“主”的功能,它重命名为之前运行的初始化函数SDL_main ,使其不与实际发生冲突main功能。 正如在FAQ注意到,您的main功能必须是形式

int main(int argc, char* argv[])


Answer 2:

虽然我同意这是一个奇怪的做法,在有些情况下,这是一个合理的解决方案,但它在很大程度上取决于平台。 考虑到不同的平台有不同的切入点。 窗户是典型的WinMain中,Linux是主要的,互动与Android在Java中发生,WinRT中使用C ++ / CX扩展,等等。 程序的入口点和API可以是非常特定平台和SDL试图拯救你不得不面对这个的麻烦。 如果你只针对Windows和SDL是只有在那里,以节省您与WIN32 API工作的麻烦,你可能不需要它。 但是,如果你超越桌面,你会发现它在我看来是有用的。



文章来源: Why SDL defines main macro?
标签: c++ sdl main