2010-05-19 10 views

उत्तर

22

c99 मानक कहा गया है कि assert कॉल abort और abort सामान राज्यों इस वापसी कोड के बारे में:

स्थिति का एक कार्यान्वयन से परिभाषित प्रपत्र असफल समाप्ति समारोह के माध्यम से मेजबान पर्यावरण में आता है कॉल जुट (एसआईजीएबीआरटी)।

यह सी 99 मानक here की धारा 7.2.1.1 (जोर) और 7.20.4.1 (निरस्त) में प्रलेखित है।

कई यूनिक्स सिस्टम 128 और सिग्नल नंबर (एसआईजीएबीआरटी सिग्नल नंबर 6) लौटाएंगे, इसलिए आपको 134 मिल सकते हैं। जो कुछ भी आपको मिलता है, उसे सी कार्यान्वयन द्वारा दस्तावेज किया जाना चाहिए।

उदाहरण के लिए, जीसीसी के लिए here देखें। हालांकि यह कॉलिंग पर्यावरण पर वापस लौटने पर काफी चुप है। विशिष्ट वर्गों से here:

लाइब्रेरी और ऑपरेटिंग सिस्टम (या एक फ्रीस्टैंडिंग पर्यावरण के लिए संकलन करते समय अन्य वातावरण) द्वारा कुछ विकल्प किए जाते हैं; विवरण के लिए उनके दस्तावेज देखें।

और here:

इन बातों के अधिकांश के व्यवहार सी पुस्तकालय के कार्यान्वयन पर निर्भर कर रहे हैं, और जीसीसी से ही परिभाषित नहीं कर रहे हैं।

तो प्रोग्राम समाप्ति (विशेष रूप से बाहर निकलने की स्थिति बिट) पर glibc doco here है। यह सम्मेलनों का उल्लेख करता है लेकिन कोई फर्म नियम नहीं है।

+0

यह एक शानदार जवाब है, और 134 वही है जो मुझे मिल रहा है। –

+0

जीसीसी के लिए प्रलेखन से जुड़े ब्याज में कुछ भी शामिल नहीं है, और न ही मुझे आपके द्वारा उद्धृत उद्धरण मिल सकता है। –

+0

आप ग्लिबैक डॉको लिंक को सीधे यहां तक ​​इंगित करने के लिए बदल सकते हैं जब तक कि मुझे कुछ याद नहीं आया? http://www.gnu.org/s/libc/manual/html_node/Exit-Status.html#Exit-Status –

2

यह कार्यान्वयन-विशिष्ट है। आप ऐसा कर सकता है:

int main() 
{ 
    assert(0); 
} 

तो यह चलाएँ:

> ./a.out 
> echo $? 
1 (<- or whatever) 

यह कम से कम तुम क्या अपने स्थापना के लिए उम्मीद करने के लिए कहेगा। मैं gcc और g ++ दोनों के साथ कुछ लिनक्स बॉक्स पर 134 gettitng हूँ।

+3

आपको हमेशा अपने उत्तरों को मानक के विशिष्ट संदर्भ के साथ वापस लेना चाहिए। – wilhelmtell

+1

कंपाइलर हमेशा टी के मानक का पालन नहीं करते हैं (मैं आपको माइक्रोसॉफ्ट देख रहा हूं) हालांकि यह जानना अच्छा है कि मानक क्या कहता है - यह भी उतना ही अच्छा है जितना कि कंपाइलर्स वास्तव में क्या करते हैं। उन्हें क्या करना चाहिए वह हमेशा ऐसा नहीं होता है जो वे वास्तव में करते हैं। वह और मानक वास्तव में मुफ़्त नहीं है। –

-1

मैं पॉज़िक्स संदेश कतारों के साथ काम कर रहा था मुझे एक ही त्रुटि मिली है mq_open errono 38 (ENOSYS) के साथ विफल रहा है।

कर्नेल कॉन्फ़िगरेशन में सक्षम पॉज़िक्स संदेश QUEUE के साथ केनेल को पुनर्निर्माण करना है।

यह कर्नेल को POSIX संदेश कतार समर्थन के साथ बनाएगा और यह मेरे लिए काम करता है।

धन्यवाद

+1

मुझे लगता है कि आप इस जवाब को किसी अन्य प्रश्न पर रखना चाहते थे। –

0

मैं इसके लिए वास्तविक कल्पना नहीं मिल सकता है (इसे POSIX तरह का मुश्किल खोज करने के लिए है), लेकिन मैं एक संदर्भ मिला।

एक निकास स्थिति में एक फेंकने का परिणाम परिणाम जो EXIT_FAILURE के समान होता है (reference)।चूंकि आप लिनक्स से निपट रहे हैं, इसलिए आप पीओएसईक्स से भी निपट रहे हैं, जो सी 99 से व्यवहार को परिभाषित करता है।

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