2016-04-19 7 views
6

मैं एक परीक्षण ढांचा लिख ​​रहा हूं और मुख्य में() मैं असफल परीक्षणों की संख्या वापस कर देता हूं। उदाहरण के लिए:छोटे मूल्यों के लिए एक प्रक्रिया ओवरफ्लो का निकास कोड क्या हो सकता है?

int main() { 
    int failedTests = runTests(); 
    return failedTests; 
} 

तो क्या यह "int" अतिप्रवाह हो सकता है? क्या मुझे == 0 होने पर मिल सकता है जब मैंने वास्तव में 0 से अलग कुछ वापस कर दिया? क्या यह होस्ट ऑपरेटिंग सिस्टम पर निर्भर करता है? सामान्य अधिकतम मूल्य क्या हैं? क्या मुझे यकीन है कि एक पूर्णांक < 32768 (2^16 - एक छोटा) हमेशा फिट होगा?

संपादित करें:

मैं अजगर sys.exit जो 0-127 रेंज (लगभग) का उपयोग करता है के साथ समस्याओं पड़ा है हमेशा इसलिए मैं अब सावधान कर रहा हूँ

+0

'% ERROR_LEVEL%' विंडोज़ 'cmd' खोल के लिए लागू नहीं होता है? 'Bash' के लिए आप' $? 'आईआईआरसी का उपयोग करते हैं। –

+0

@ πάνταῥεῖ हाँ - मेरा प्रश्न सभी प्लेटफ़ॉर्म के लिए है - कोई भी जानकारी उपयोगी है – onqtam

+0

यदि आप बैश में प्रोग्राम के अंतिम वापसी मूल्य को प्राप्त करना चाहते हैं, या इसी तरह, तो आप '$?' का उपयोग करते हैं, यह सही है। – Leandros

उत्तर

4

यह ऑपरेटिंग सिस्टम पर निर्भर करता है। लिनक्स पर, यह 8 बिट तक सीमित है, इसलिए 0 (सफलता के लिए) या 255 से अधिक नहीं होने वाला कोई भी सकारात्मक पूर्णांक हो सकता है। _exit(2) & wait(2) देखें।

केवल दो मान मानकीकृत हैं (नाम से): EXIT_SUCCESS (आमतौर पर यह 0 है) और EXIT_FAILURE (अक्सर 1 के रूप में)। ध्यान दें कि मानक नाम परिभाषित करता है (और शायद exit(0); का व्यवहार भी ...) लेकिन उनका मूल्य नहीं।

आप संख्या (विफल परीक्षणों) की संख्या stdout या कुछ प्रोग्राम तर्क के माध्यम से निर्दिष्ट कुछ फ़ाइल लिख सकते हैं।

फ्रीबीएसडी ने sysexits(3) में निकास नामों और कोडों का एक सेट परिभाषित किया है, लेकिन वे मानकीकृत नहीं हैं, उदा। POSIX में। POSIX documentation on exit देखें।

+0

** गलत! ** न तो 'EXIT_SUCCESS' और न ही' EXIT_FAILURE' के पास कोई मान संलग्न है। उनके मूल्य कार्यान्वयन परिभाषित हैं। जबकि '0' सफल प्रोग्राम निष्पादन को इंगित करेगा, यह आवश्यक नहीं है कि' EXIT_SUCCESS' भी '0' के बराबर है। – Leandros

+0

@Leandros - वे परिभाषित कार्यान्वयन नहीं कर रहे हैं। वे बस कार्यान्वयन द्वारा परिभाषित कर रहे हैं। "कार्यान्वयन-परिभाषित" का मानक में एक विशेष अर्थ है: जब कुछ व्यवहार कार्यान्वयन परिभाषित किया जाता है तो कार्यान्वयन आपको यह बताने पड़ता है कि यह क्या करता है। –

+0

@Leandros - नहीं। 'EXIT_SUCCESS' और' EXIT_FAILURE' पहले से ही परिभाषित व्यवहार है: मानक कहता है कि वे क्या करते हैं। कार्यान्वयन पर कोई दायित्व नहीं है कि ये नाम क्या हैं। ** मान ** कार्यान्वयन-विशिष्ट हो सकते हैं, लेकिन उन नामों का उपयोग करने के ** प्रभाव ** ** ** ** कार्यान्वित परिभाषित नहीं हैं। –

3

हाँ, यह ठीक वैसे ही जैसा किसी अन्य int अतिप्रवाह कर सकते हैं ।

मानक int का वर्णन करता है कम से कम 16 बिट चौड़ा होना। int में फिट नहीं होने वाली किसी भी चीज़ को वापस करना अनिर्धारित व्यवहार है।

पर्यावरण, जिसमें सी ++ प्रोग्राम चलता है, मूल्य के साथ करता है, कार्यान्वयन परिभाषित किया जाता है और मानक द्वारा वर्णित नहीं किया जाता है।

तीन मूल्यों सी ++ मानक से उल्लेख कर रहे हैं: EXIT_SUCCESS, EXIT_FAILURE और 00 और EXIT_SUCCESS दोनों सफल प्रोग्राम निष्पादन को इंगित करते हैं, जबकि अन्य विफलता को परिभाषित करता है। EXIT_SUCCES शून्य होने की आवश्यकता नहीं है।

सी ++ 11 मानक का हवाला देते हुए:

स्थिति शून्य या EXIT_SUCCESS, स्थिति सफल समापन दिया जाता है की एक कार्यान्वयन से परिभाषित रूप है। यदि स्थिति EXIT_- विफलता है, तो असफल समाप्ति की स्थिति का कार्यान्वयन-परिभाषित रूप वापस कर दिया जाता है। अन्यथा स्थिति लौटा है कार्यान्वयन-defined.225

सामान्य समर्थित मानों कार्यान्वयन के लिए कार्यान्वयन से भिन्न होता है, तो Windows वापसी मान के रूप में पूर्ण 32 बिट पूर्णांकों का उपयोग करता है, और पूर्ण 32 बिट विभिन्न साधनों के माध्यम से प्राप्त किया जा सकता है। POSIX केवल निर्दिष्ट करता है कि 8 कम ऑर्डर बिट्स कैसे प्राप्त किए जा सकते हैं, और इस प्रकार गोले अक्सर लौटाए गए मानों को कम कर देते हैं।

+0

डाउनवॉटर की व्याख्या करने की देखभाल? – Leandros

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