एसडीएल की स्थापना कुछ परेशानी हो रही करने के बाद, मुझे पता चला है कि एसडीएल मैक्रो मुख्य बदल देता है परिभाषित करता है:क्यों एसडीएल मुख्य मैक्रो परिभाषित करता है?
#define main SDL_main
// And then
extern C_LINKAGE int SDL_main(int argc, char *argv[]);
यह भी संकलन त्रुटियों बना सकते हैं, मुख्य कार्य argc
और argv
पैरामीटर परिभाषित नहीं है, तो ।
यह मैक्रो मुझे देखता है जब मैं इसे देखता हूं ... एसडीएल को मुख्य रूप से फिर से परिभाषित करने की आवश्यकता क्यों होती है? कुछ और खोज के बाद, मैंने पाया कि कुछ लोग #undef main
, और इसे सामान्य तरीके से उपयोग करते हैं।
तो यह सवाल है:एसडीएल को मुख्य रूप से फिर से परिभाषित करने की आवश्यकता क्यों है, यह क्या करता है? क्या इसे परिभाषित करने के लिए कोई दुष्प्रभाव हैं?
एक बात मैंने देखा है कि एसडीएल मानक आउटपुट और फ़ाइलों में त्रुटि को रीडायरेक्ट करता है (और मुझे यह व्यवहार नहीं चाहिए), और यदि मैं मुख्य को अपरिभाषित करता हूं तो यह व्यवहार बंद हो जाता है।
लगभग हर लाइब्रेरी को प्रारंभिकरण की आवश्यकता होती है लेकिन यह कैसे करना है इसके लिए एक खराब अभ्यास की तरह दिखता है। वैसे भी +1। –
@ डेविडग्रेसन वास्तव में बहुत खराब अभ्यास, विशेष रूप से यदि आपके पास दो पुस्तकालय हैं जो यह करते हैं ... पेटी में भारी दर्द –
क्या मैं इस अजीब SDL_main() फ़ंक्शन का उपयोग करने के बजाय मुख्य() का अपना कार्यान्वयन लिख सकता हूं? कुछ चीजें हैं (उदाहरण के लिए, स्टडआउट रीडायरेक्शन) जो मेरे गले को धक्का दे रही हैं, और मुझे यह नहीं चाहिए। – Tibi