為什么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 回答

慕絲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[])

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
雖然我同意這是一種奇怪的做法,但有些情況下這是一個合理的解決方案,盡管它在很大程度上取決于平臺。考慮到不同的平臺有不同的入口點。Windows通常是WinMain,Linux是主要的,與Java交互發生在Java中,WinRT使用C ++ / CX擴展,等等。程序入口點和API可以是特定于平臺的,SDL會嘗試為您節省處理此問題的麻煩。如果您只針對Windows而SDL只是為了省去使用WIN32 API的麻煩,您可能不需要它。但是,如果你超越桌面,你會發現它在我看來很有用。
- 2 回答
- 0 關注
- 727 瀏覽
添加回答
舉報
0/150
提交
取消