为什么SDL定义主宏?在设置SDL时遇到一些问题后,我发现SDL定义了一个替换main的宏:#define main SDL_main// And then
extern C_LINKAGE int SDL_main(int argc, char *argv[]);如果main函数没有定义argc和argv参数,这也会产生编译错误。当我看到它时,这个宏让我感到头疼......为什么SDL需要重新定义主?经过一番搜索,我找到了一些人#undef main,并以正常的方式使用它。所以这就是问题: 为什么SDL需要重新定义main,它做什么?取消定义是否有任何副作用?我注意到的一件事是SDL将标准输出和错误重定向到文件(我不想要这种行为),如果我取消定义主要行为,这种行为就会停止。
2 回答
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
慕丝7291255
TA贡献1859条经验 获得超6个赞
您应该使用
main()
而不是WinMain()
即使您正在创建Windows应用程序,因为SDL提供的版本WinMain()
在调用主代码之前执行某些SDL初始化。如果由于某种原因需要使用
WinMain()
,请查看SDL源代码,src/main/win32/SDL_main.c
看看您需要在WinMain()
函数中进行哪种初始化,以便SDL正常工作。
SDL需要初始化,因此它会main
在调用“main”函数之前注入自己的函数来运行其初始化,它将重命名为“main”函数,SDL_main
以便它不会与实际main
函数冲突。如FAQ中所述,您的main
功能必须符合表格
int main(int argc, char* argv[])
![?](http://img1.sycdn.imooc.com/5458657e000125a302200220-100-100.jpg)
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
虽然我同意这是一种奇怪的做法,但有些情况下这是一个合理的解决方案,尽管它在很大程度上取决于平台。考虑到不同的平台有不同的入口点。Windows通常是WinMain,Linux是主要的,与Java交互发生在Java中,WinRT使用C ++ / CX扩展,等等。程序入口点和API可以是特定于平台的,SDL会尝试为您节省处理此问题的麻烦。如果您只针对Windows而SDL只是为了省去使用WIN32 API的麻烦,您可能不需要它。但是,如果你超越桌面,你会发现它在我看来很有用。
- 2 回答
- 0 关注
- 671 浏览
添加回答
举报
0/150
提交
取消