निकास () फ़ंक्शन का उपयोग


100

मैं जानना चाहता हूं कि मैं exit()अपनी पुस्तक में कार्यक्रम की तरह कैसे और कब उपयोग कर सकता हूं :

#include<stdio.h>

void main()
{
    int goals;
    printf("enter number of goals scored");
    scanf("%d",&goals);

    if(goals<=5)
        goto sos;
    else
    {
        printf("hehe");
        exit( );
    }
    sos:
    printf("to err is human");
}

जब मैं इसे चलाता हूं, तो यह ERROR दिखाता है: अपरिभाषित फ़ंक्शन निकास () को कॉल करें

इसके अलावा, मैं जानना चाहता हूं कि मैं उस विंडो को बंद करने का विकल्प कैसे बना सकता हूं जिसमें प्रोग्राम चलता है? उदाहरण के लिए, मैंने एक मेनू-संचालित कार्यक्रम बनाया जिसमें कई विकल्प थे और उनमें से एक था "मेनू से बाहर निकलें" । मैं इसे प्रोग्राम से बाहर कैसे कर सकता हूं (अर्थात विंडो बंद करें)?


8
यदि आप उत्तर चाहते हैं, तो अपने कोड और प्रश्न को प्रारूपित करें ताकि लोग इसे पढ़ सकें। और चिल्लाओ मत!

3
कोड प्रारूप एक चीज है, लेकिन यह खराब तरीके से लिखा गया है। आप ऐसे उत्तर नहीं चाहते हैं जो इस तरह दिखते हों, क्या आप?
कोबी

54
oy! गोटो और निकास? मेरी आँखें! वे जलते हैं!
काइल

8
मैं कोई सी-एक्सपर्ट नहीं हूं और न ही मैं इसे बिना किसी कठिनाई के लिख सकता हूं, इसलिए मैं इस बारे में गलत हो सकता हूं ... लेकिन क्या मैं सुझाव दे सकता हूं कि आप उस किताब को फेंक दें? C में गोटो का उपयोग करना पसंद है ... जैसे ... मुझे नहीं पता। और अगर आप अब मुझे माफ करते हैं, तो उन्हें पता चला कि दरवाजे कैसे खोलें * hides.in.the.kitchen * ...
बॉबी

8
खैर, गोटो अभी भी सी में वैध वाक्यविन्यास है। इसे स्टाइलिस्टिक रूप से अस्वीकृत किया जा सकता है , लेकिन यह अभी भी मान्य है। void main()OTOH सिर्फ सादा गलत है । जैसे exit();गलत है, और #include <stdlib.h>चूक गलत है।
Wildplasser

जवाबों:


167

exit(0);इसके बजाय प्रयोग करके देखें । exitसमारोह एक पूर्णांक पैरामीटर की उम्मीद है। और करने के लिए मत भूलना #include <stdlib.h>


2
आदमी पेज कहते हैं, "` EXIT_SUCCESS और EXIT_FAILURE के उपयोग 0 के उपयोग और 1 या जैसे कुछ अशून्य मान से (गैर यूनिक्स वातावरण के लिए) से थोड़ा अधिक पोर्टेबल है -1 `।"
Mawg कहते ही पुन: स्थापित मोनिका

82

exitसमारोह, stdlib शीर्षक में घोषित किया जाता है, ताकि आप की जरूरत है

#include <stdlib.h>

उपयोग करने में सक्षम होने के लिए अपने कार्यक्रम के शीर्ष पर exit

ध्यान दें कि exitपूर्णांक तर्क लेता है, इसलिए आप इसे कॉल नहीं कर सकते exit(), जैसे आपको कॉल करना है exit(0)या exit(42)। आमतौर पर इसका मतलब है कि आपका कार्यक्रम सफलतापूर्वक पूरा हो गया है, और त्रुटि कोड के रूप में नॉनजरो मूल्यों का उपयोग किया जाता है।

वहाँ भी पूर्वनिर्धारित मैक्रोज़ हैं EXIT_SUCCESSऔर EXIT_FAILURE, उदाहरण के लिएexit(EXIT_SUCCESS);


3
+1 न केवल exitएक पूर्णांक तर्क लेने वाले का उल्लेख करने के लिए , बल्कि यह समझाता है कि यह पूर्णांक तर्क क्यों लेता है और कुछ संकलक को स्पष्ट की आवश्यकता होती है #include <stdlib.h>
वारियाडिज्म

उल्लेखित पूर्वनिर्धारित मैक्रो संकलन समय में परिभाषित किए गए हैं, क्या वे नहीं हैं?
carloswm85

11

exit(int code);में घोषित किया गया है stdlib.hइसलिए आपको इसकी आवश्यकता है

#include <stdlib.h>

इसके अलावा:
- आप के लिए कोई पैरामीटर नहीं है exit(), यह एक intतो एक की आवश्यकता है ।
- इस पुस्तक को जलाएं, यह वह उपयोग करता है gotoजो (सभी के लिए लेकिन लिनक्स कर्नेल हैकर्स) बुरा, बहुत, बहुत , बहुत बुरा है।

संपादित करें:
ओह, और

void main()

यह भी बुरा है:

int main(int argc, char *argv[])

हाँ, इस पुस्तक में लिखा है कि यू बेहतर sont उपयोग गोटो बीटी की पूर्णता के लिए पुस्तक मी सिर्फ यू एक उदाहरण दे रहा है ... तो किताब बुरा नहीं है !!
क्रैकेन

5
gotoकभी-कभी सही काम करना होता है (और लिनक्स कर्नेल इसके कई उदाहरण प्रदान करता है, लेकिन यह एकमात्र कोड नहीं है जो इसका उपयोग कर सकता है)। लेकिन ओपी का उदाहरण स्पष्ट रूप से उन मामलों में से एक नहीं है, इसलिए हां, उस पुस्तक को जला दिया जाना चाहिए :)।
एडम रोसेनफील्ड

11

आदमी बाहर निकलने की कोशिश करो ।


ओह, और:

#include <stdlib.h>

int main(void) {
  /*  ...  */
  if (error_occured) {
    return (EXIT_FAILURE);
  }
  /*  ...  */
  return (EXIT_SUCCESS);
}

अधिक विशेष रूप से, "कंसोल से मैन 2 एक्जिट" का प्रयास करें। सी डॉक्स बहुत विस्तृत हैं।
जस्टिन

सही आप @ बर्ट्रेंड मार्रोन हैं
जस्टिन

7

exit()समारोह एक तर्क के बिना एक वापसी प्रकार के साथ समारोह का एक प्रकार है। यह stdlib हेडर फ़ाइल द्वारा परिभाषित किया गया है।

आप उपयोग करने की आवश्यकता ( exit(0) or exit(EXIT_SUCCESS))या (exit(non-zero)या exit(EXIT_FAILURE) )


4

निम्न उदाहरण exit()फ़ंक्शन का उपयोग दिखाता है ।

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    printf("Start of the program....\n");
    printf("Exiting the program....\n");
    exit(0);
    printf("End of the program....\n");
    return 0;
}

उत्पादन

कार्यक्रम की शुरुआत .... कार्यक्रम से
बाहर ...।


2

आपको #include <stdlib.h>उस हेडर फ़ाइल को शामिल करने के लिए एक पंक्ति जोड़नी होगी और exitकुछ पूर्णांक असाइन करने के लिए एक मान वापस करना होगा exit(any_integer)


2

मूल प्रक्रिया में निकास कोड वापस करने के अलावा -

UNIX में, एक महत्वपूर्ण पहलू जो मुझे लगता है कि छोड़ दिया गया है, वह निकास () पहली कॉल पर (रिवर्स ऑर्डर में) उन सभी कार्यों को, जो एटैक्सिट () कॉल द्वारा पंजीकृत थे।

कृपया विवरण के लिए SUSv4 देखें।


1

यूनिक्स जैसे ऑपरेटिंग सिस्टम से बाहर निकलना सिस्टम कॉल के समूह से संबंधित है। सिस्टम कॉल विशेष कॉल होते हैं जो कर्नेल कोड को कॉल करने के लिए उपयोगकर्ता कोड (आपका कोड) को सक्षम करते हैं। इसलिए एग्जिट कॉल ओएस पर नियंत्रण वापस करने से पहले कुछ ओएस विशिष्ट सफाई-अप क्रिया करता है, यह कार्यक्रम को समाप्त करता है।

#include <stdlib.h>

// example 1
int main(int argc, char *argv){
  exit(EXIT_SUCCESS);
}

// example 2
int main(int argc, char *argv){
  return 0;
}

कुछ संकलक आपको इन दोनों उदाहरणों से समान ओपकोड देंगे, लेकिन कुछ नहीं। उदाहरण के लिए पहले फ़ंक्शन से ओपकोड में किसी भी प्रकार का स्टैक पोजिशनिंग ओपोड शामिल नहीं होगा जो कि किसी अन्य फ़ंक्शन के लिए दूसरे उदाहरण में शामिल किया जाएगा। आप दोनों उदाहरणों को संकलित कर सकते हैं और उन्हें अलग कर सकते हैं और आप अंतर देखेंगे।

आप अपने कोड के किसी भी भाग से निकास का उपयोग कर सकते हैं और सुनिश्चित करें कि प्रक्रिया समाप्त हो जाती है। पूर्णांक पैरामीटर को शामिल करना न भूलें।


-2

हेडर फ़ाइल लिखें #include<process.h>और उसके exit();साथ बदलें exit(0);। यह निश्चित रूप से टर्बो सी में काम करेगा; अन्य संकलक के लिए मुझे नहीं पता।


1
<process.h> `गैर-मानक है। में exitफ़ंक्शन घोषित किया गया है <stdlib.h>
कीथ थॉम्पसन

<process.h> इस समस्या को हल नहीं करेगा। क्या आपका प्रश्न पूछा गया है?
क्यूरियस माइंड

-3

खराब प्रोग्रामिंग अभ्यास। एक गोटो फ़ंक्शन का उपयोग करना सी प्रोग्रामिंग में एक पूर्ण नहीं है। फ़ंक्शन का उपयोग करने के लिए
लिखकर हेडर फ़ाइल stdlib.h भी शामिल करें । यह भी याद रखें कि निकास () फ़ंक्शन पूर्णांक तर्क लेता है। उपयोग करता है, तो कार्यक्रम को सफलतापूर्वक पूरा कर लिया है और तर्क है, तो कार्यक्रम त्रुटि है के रूप में किसी भी गैर शून्य मान के साथ या बाहर निकलने के कार्य करते हैं।#include <iostream.h>exit()exit(0)exit(-1)


1
<iostream.h>C ++ के लिए विशिष्ट है, और इससे संबंधित नहीं है <stdlib.h>, हेडर जो वास्तव में आवश्यक है। करने के लिए केवल पोर्टेबल तर्क exitसमारोह कर रहे हैं 0, EXIT_SUCCESSऔर EXIT_FAILURE। विफलता को निरूपित करने के लिए किसी भी गैर-शून्य मान का उपयोग यूनिक्स-जैसी प्रणालियों (और शायद कुछ अन्य) के लिए विशिष्ट है; पोर्टेबल कोड में इस पर भरोसा न करें।
कीथ थॉम्पसन

-4

stdlib.hअपने हेडर में शामिल करें , और फिर abort();किसी भी स्थान पर कॉल करें जिसे आप अपने प्रोग्राम से बाहर निकलना चाहते हैं। ऐशे ही:

switch(varName)
{
    case 1: 
     blah blah;
    case 2:
     blah blah;
    case 3:
     abort();
}

जब उपयोगकर्ता स्विच में प्रवेश करता है तो इसे स्वीकार करता है और इसे केस 3 को देता है जहां आप abortफ़ंक्शन को कॉल करते हैं। एंटर की को हिट करने के तुरंत बाद यह आपकी स्क्रीन से बाहर निकल जाएगा।


6
abortहै नहीं यहाँ कहते हैं, यह फोन नहीं होगा करने के लिए उचित बात atexitसंचालकों या फ्लश फ़ाइल खोलने बफ़र्स। इसका उपयोग केवल असामान्य कार्यक्रम समाप्ति के लिए किया जाना चाहिए, उदाहरण के लिए असफल दावे आदि। सामान्य कार्यक्रम समाप्ति के लिए, exitका उपयोग किया जाना चाहिए।
एडम रोसेनफील्ड

-6

Stdlib और iostream के बजाय process.h का उपयोग करें ... यह 100% काम करेगा।


4
मुझे नहीं पता कि क्या प्रक्रिया है। यह निश्चित रूप से मानक सी नहीं है, और उन प्रणालियों पर काम नहीं करेगा जो इसे प्रदान नहीं करते हैं। <iostream>हैडर सेल्सियस तक ++ विशिष्ट है, सवाल सी के बारे में है
कीथ थॉम्पसन

1
यह याहू नहीं है! जवाब, यह स्टैक ओवरफ्लो है। यदि आप उत्तर देते हैं, तो आपको कम से कम पहले इसका परीक्षण करने की आवश्यकता है!
wizzwizz4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.