2010-03-02 19 views
12

मुझे समझ में नहीं आता क्यों सी #फ़ंक्शन डिफ़ॉल्ट रूप से शून्य है (उदाहरण के लिए कंसोल प्रोजेक्ट में)। सी और सी ++ में मानक स्पष्ट रूप से कहता है कि मुख्य को int वापस करना होगा, और वापसी मूल्य का उपयोग करना समझ में आता है क्योंकि हम बाहरी प्रोग्राम से उस वापसी मूल्य को देख सकते हैं और देख सकते हैं कि सी/सी ++ एप्लिकेशन सफलतापूर्वक समाप्त हुआ है या कोई त्रुटि आई है।सी # अंतर्निहित शून्य का उपयोग क्यों करता है?

तो मेरी प्रश्न हैं:

  1. दृश्य स्टूडियो क्यों घोषित करता Main के रूप में शून्य?
  2. सी # कंसोल एप्लिकेशन निष्पादित करने के बाद ओएस में मूल्य लौटने का सबसे अच्छा तरीका क्या है?

उत्तर

11

सी # में, आप उपयोग कर सकते हैं, see MSDN:

static int Main() 
static int Main(string[] args) 
static void Main() 
static void Main(string[] args) 

यह लचीलापन (भ्रम) भी सी में मौजूद ++ और सी

से विरासत में मिला है आप 2 तरीकों से एक (int) मान भी वापस कर सकते हैं।

एक कंसोल आवेदन में मैं का प्रयोग करेंगे एक WinForms/WPF/... ऐप्लिकेशन में int Main() { ...; return 2; }

, दुर्लभ स्थिति यह एक वापसी मान की जरूरत है, मैं का प्रयोग करेंगे
Environment.ExitCode = 1; या Environment.Exit(1);

+1

सी और सी ++ में विशेष रूप से पुरानी पाठ्यपुस्तकों में भ्रम है, लेकिन सी और सी ++ दोनों के आईएसओ मानकों को केवल 'int मुख्य (शून्य) 'और' int main (int, char **)' की आवश्यकता होती है। 'शून्य मुख्य (शून्य)' मानक कभी नहीं रहा है और इससे बचा जाना चाहिए। –

+2

उत्तर देने वाला यह मानता है कि आप क्या कर सकते हैं, मानक नहीं। – marr75

16

आप एक वापसी प्रकार के रूप में या तो पूर्णांक या शून्य उपयोग कर सकते हैं। इस प्रकार, बस इसे बदलें और सी ++ में एक मान वापस करें।

शायद शुरुआती लोगों को पहेली न करने के लिए डिफ़ॉल्ट रूप से यह शून्य हो गया है।

+4

यह (है कि वापसी कोड डॉस से विरासत है) –

3

आप किसी भी समस्या के बिना मुख्य प्रकार के रिटर्न प्रकार को बदल सकते हैं।

+2

आप अपनी पसंद के कुछ भी करने के लिए इसे बदल सकते हैं क्योंकि आप आमतौर पर एक जीत अनुप्रयोग में मुख्य() से कुछ भी वापस जाने के लिए की जरूरत नहीं है डिफ़ॉल्ट रूप से शून्य है? या 'int' और 'शून्य' केवल एक ही विकल्प हैं? –

+0

ठीक है, कुछ स्थितियों में सी और सी ++ के बारे में भी यही कहा जा सकता है (किसी बिंदु पर, 'शून्य मुख्य' कुछ कंपेलरों द्वारा मान्य माना जाता था)। सी # में मुख्य घोषित करने का एक मानक तरीका है? – IVlad

6

कारणों के कारण सी # के डेवलपर्स ने मुख्य घोषित घोषित किया कि मैं शून्य नहीं कह सकता था। जहां तक ​​ओएस के लिए मूल्यों को लौटने के रूप में जब आवेदन समाप्त हो गया है तो आप इस का उपयोग कर सकते हैं:

System.Environment.ExitCode = 1; // Or whatever number other than 0 for errors. 
0

आप ओएस को एक पूर्णांक कोड को समाप्त करने और वापस करने के लिए Environment.Exit() का उपयोग कर सकते हैं। वैकल्पिक रूप से, आप Environment.ExitCode सेट कर सकते हैं और जब भी आपका प्रोग्राम सामान्य रूप से समाप्त हो जाता है तो वह कोड ओएस पर वापस कर दिया जाएगा।

+0

क्या यह मुख्य रूप से int को घोषित करने और मूल्य लौटने की तुलना में बेहतर अभ्यास माना जाता है? मुझे लगता है कि यह है, क्योंकि इस तरह से हम किसी भी अन्य समारोह से बाहर निकलने के साथ प्रोग्राम से बाहर निकल सकते हैं। – IVlad

+0

@IVlad - मैं नहीं कहूंगा कि यह वास्तव में एक बेहतर अभ्यास है, इसे करने का एक अलग तरीका है। –

2

बाहर निकलने के मूल्य को वापस करने का सबसे अच्छा तरीका उपयोग करना है। मैं यह इसलिए कहता हूं क्योंकि गैर-शून्य निकास कोड आमतौर पर कुछ त्रुटि को इंगित करने के लिए उपयोग किए जाते हैं, आमतौर पर वह जिसे आप जारी रखना नहीं चाहते हैं। गैर-शून्य निकास मूल्य के साथ Exit पर कॉल करने से मूल्य के माध्यम से त्रुटि संकेत मिलता है और प्रोग्राम से बाहर निकलता है।

Environment.Exit(value); 

संपादित: नोट, मेरे बयान के लिए संदर्भ एक सांत्वना कार्यक्रम के लिए Main भीतर था। पुस्तकालयों और अन्य तरीकों को अपवाद फेंकना चाहिए या त्रुटि मान वापस करना चाहिए। केवल आपके मुख्य दिनचर्या को Exit पर कॉल करना चाहिए। क्षमा करें अगर यह स्पष्ट नहीं था।

+1

-1: 'पर्यावरण' एक्सटिट() 'कॉलिंग' सबसे खराब प्रकार का 'गोटो' कथन है - प्रोग्राम में कहीं से भी, सभी सीमाओं को समाप्त करने के लिए। –

+0

आप बिंदु को याद करते हैं - Environment.Exit() .NET का ABEND है। जब आप गैर-शून्य निकास मान के साथ असामान्य रूप से प्रोग्राम से बाहर निकलना चाहते हैं, तो आप इसे बिल्कुल ठीक कहते हैं, ठीक उसी कारण, उस बिंदु से आगे जारी रखना खतरनाक (या व्यर्थ) होगा। यह एक समारोह से जल्दी वापसी की तरह है। मैं किसी भी परिस्थिति के बारे में नहीं सोच सकता जिसमें मैं इसका उपयोग करूंगा जो आपको प्रोग्राम के "अंत" तक पहुंचने के लिए कुछ फर्जी तर्क बनाकर बेहतर सेवा प्रदान करेगा। उस ने कहा, मैं केवल इसे 'मुख्य' में उपयोग करूंगा - आप नहीं चाहते कि आपके पुस्तकालय इसे बुलाएं, उन्हें अपवाद फेंकना चाहिए। – tvanfosson

2

याद रखें, आपके प्रोग्राम के आसपास अभी भी एक और "बॉक्स" है - सीएलआर। यह त्रुटि कोड वापस कर देगा, जब आपका कोड एक अनचाहे अपवाद फेंकता है।

7

यह बिल्कुल शून्य नहीं है। जैसा कि, आप केवल मुख्य (स्ट्रिंग [] तर्क) घोषित नहीं कर सकते हैं और इसे शून्य कार्य के रूप में संकलित कर सकते हैं। डिफ़ॉल्ट परियोजनाएं मुख्य() को शून्य के रूप में घोषित करती हैं क्योंकि डिफ़ॉल्ट परियोजनाओं में मुख्य से वापस आने के लिए कुछ भी उपयोगी नहीं होता है।

यह भी ध्यान देने योग्य है कि सी # सी या सी ++ नहीं है। कुछ वाक्यविन्यास समान हैं, लेकिन अंतर बहुत तेज़ हैं।

संबंधित मुद्दे