亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么SDL定義主宏?

為什么SDL定義主宏?

C++
收到一只叮咚 2019-08-28 09:36:58
為什么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個贊

根據SDL Windows常見問題解答

您應該使用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[])


查看完整回答
反對 回復 2019-08-28
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

雖然我同意這是一種奇怪的做法,但有些情況下這是一個合理的解決方案,盡管它在很大程度上取決于平臺。考慮到不同的平臺有不同的入口點。Windows通常是WinMain,Linux是主要的,與Java交互發生在Java中,WinRT使用C ++ / CX擴展,等等。程序入口點和API可以是特定于平臺的,SDL會嘗試為您節省處理此問題的麻煩。如果您只針對Windows而SDL只是為了省去使用WIN32 API的麻煩,您可能不需要它。但是,如果你超越桌面,你會發現它在我看來很有用。


查看完整回答
反對 回復 2019-08-28
  • 2 回答
  • 0 關注
  • 727 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號