से ले जाया गया [Windows प्रोग्रामिंग में,] क्यों आवेदन प्रवेश बिंदु मुख्य आमंत्रित नहीं किया गया? खैर, एक बात के लिए, मुख्य नाम पहले से ही लिया गया था, और विंडोज़ के पास वैकल्पिक परिभाषा आरक्षित करने का अधिकार नहीं था। तब कोई सी भाषा मानकीकरण समिति नहीं थी; सी था जो डेनिस ने कहा था, और इसकी शायद ही गारंटी थी कि डेनिस सी भाषा के किसी भी भविष्य संस्करण में विंडोज स्रोत कोड संगतता को संरक्षित करने के लिए कोई विशेष कदम उठाएगा। चूंकि के & आर ने यह निर्दिष्ट नहीं किया कि कार्यान्वयन मुख्य कार्य के स्वीकार्य रूप को बढ़ा सकता है, यह पूरी तरह से संभव था कि कानूनी सी कंपाइलर था जो मुख्य रूप से गलत घोषित कार्यक्रमों को अस्वीकार कर देता था। वर्तमान सी भाषा मानक मुख्य रूप से कार्यान्वयन-विशिष्ट मुख्य परिभाषाओं को मुख्य रूप से अनुमति देता है, लेकिन सभी कंप्यूटर्स को का समर्थन करने के लिए Windows प्रोग्राम संकलित करने के लिए इस नए विंडोज-विशिष्ट संस्करण की आवश्यकता होती है, जो आप लेखन के लिए उपयोग कर सकते हैं संकलितों के सेट को पूरी तरह प्रतिबंधित कर देंगे विंडोज प्रोग्राम
अगर आपको लगता है कि बाधा पर काबू पाने में कामयाब रहे, आप समस्या कि मुख्य के Windows संस्करण कुछ इस तरह होना चाहिए था होगा:, प्रदर्शन किया गया था
int main(int argc, char *argv[], HINSTANCE hinst,
HINSTANCE hinstPrev, int nCmdShow);
रास्ता सी लिंकेज के कारण सभी किसी फ़ंक्शन की विविधताओं को पैरामीटर पर आम सहमति थी, जो उनके समान थे। इसका अर्थ यह है कि विंडोज संस्करण को अपने पैरामीटर को सबसे लंबे समय तक मौजूदा संस्करण के अंत में जोड़ना होगा, और फिर आपको अपनी उंगलियों को पार करना होगा और पर आशा करना होगा कि सी भाषा ने कभी भी मुख्य का दूसरा वैकल्पिक संस्करण नहीं जोड़ा है। यदि आप इस मार्ग पर गए, तो आपकी क्रॉस उंगलियां आपको विफल कर दीं, क्योंकि यह बदल जाती है कि कुछ समय बाद एक तीसरा पैरामीटर मुख्य में जोड़ा गया था, और यह आपके विंडोज-अनुकूल संस्करण से विवादित था।
मान लीजिए कि आप डेनिस को यह मानने में कामयाब रहे कि मुख्य के तीन-पैरामीटर संस्करण को अनुमति न दें। आपको अभी भी उन के साथ पहले दो पैरामीटर के साथ आना होगा, जिसका अर्थ है कि प्रत्येक प्रोग्राम के स्टार्टअप कोड में कमांड लाइन पार्सर होना आवश्यक है। 16-बिट दिनों में, लोग हर बाइट को बचाने के लिए scrimped। उन्हें बताते हुए, "ओह, और आपके सभी प्रोग्राम 2KB बड़े होने जा रहे हैं" शायद आपको मित्रों के बहुत कुछ नहीं मिलेंगे। मेरा मतलब है, यह एक फ्लॉपी डिस्क से I/O के चार सेक्टर हैं!
लेकिन शायद कारण यह है कि विंडोज प्रविष्टि बिंदु अलग-अलग नाम दिया गया था, यह जोर देना है कि यह एक अलग निष्पादन पर्यावरण है। यदि इसे मुख्य कहा जाता है, तो लोग कंसोल पर्यावरण के लिए डिज़ाइन किए गए सी प्रोग्राम लेते हैं, उन्हें अपने विंडोज कंपाइलर में फेंक देते हैं, और फिर उन्हें विनाशकारी परिणामों के साथ चलाते हैं।
तो कंसोल और जीयूआई आवेदन मामलों में निष्पादन का आदेश क्या है? क्या स्थिर दो भाग उन मामलों में अलग है? सी रनटाइम कहां फिट है? –
पहले स्थिर भाग निष्पादित किया जाता है, फिर यह उपयोगकर्ता द्वारा लागू प्रविष्टि बिंदु को कॉल करता है। यह अलग हो सकता है या यह वही हो सकता है, लेकिन लिंकर सेटिंग के आधार पर कॉल को विभिन्न प्रविष्टि बिंदुओं से जोड़ सकता है। आप इस स्थिर भाग के बारे में सोच सकते हैं क्योंकि यह सी रनटाइम का हिस्सा है। – sharptooth