C भाषा में एरर हैंडलिंग क्या है What is Error Handling in C


C भाषा में एरर हैंडलिंग 
क्या है What is Error Handling in C


C भाषा में Error Handling एक महत्वपूर्ण तकनीक है जो प्रोग्रामर को उन त्रुटियों से निपटने में मदद करता है जो उनके प्रोग्राम में आ सकती हैं। त्रुटि हैंडलिंग उन त्रुटियों को संभवतः जटिल नहीं करता है जो प्रोग्राम में हो सकती हैं, लेकिन उन्हें पकड़ने और इस पर नियंत्रण रखने की सुविधा प्रदान करता है ताकि प्रोग्राम बंद न हो जाए या नहीं क्रैश हो जाए।

C में त्रुटि हैंडलिंग के लिए एक विशेष लाइब्रेरी है, जिसे एरर हैंडलिंग लाइब्रेरी कहा जाता है। इस लाइब्रेरी में कुछ स्टैंडर्ड फ़ंक्शंस होते हैं जो ट्रुटि संबंधी जानकारी उपलब्ध कराते हैं और एक से अधिक त्रुटि को एक साथ हैंडल करने की अनुमति देते हैं।

त्रुटि हैंडलिंग के लिए निम्नलिखित स्टैंडर्ड फंक्शंस होते हैं:

perror() - इस फंक्शन का उपयोग errno द्वारा संदिग्ध स्थिति को व्याख्या करने के लिए किया जाता है।

strerror() - इस फंक्शन का उपयोग errno के मान को लेकर उसकी स्थिति का विवरण प्राप्त करने के लिए किया जाता है।

exit() - इस फंक्शन का उपयोग प्रोग्राम को अनुचित तरीके से समाप्त करने के लिए किया जाता है।

assert() - इस फंक्शन का उपयोग एक assertion की सत्यता की जाँच करने के लिए किया जाता है। यदि assertion false होती है तो, तो इसका प्रोग्राम को अवरुद्ध कर दिया जाता है।

Error Handling के लिए कुछ तकनीकों का उपयोग किया जाता हैं।

Error codes: कुछ फ़ंक्शंस एक Error Code वापस करते हैं, जो बताते हैं कि वहां कोई त्रुटि हुई है या नहीं। उपयोगकर्ता को फ़ंक्शंस कोल करने से पहले उनको इस Error Code के बारे में सूचित किया जा सकता है और उपयोगकर्ता इसे उचित तरीके से देख सकता है।

Return Values: कुछ फ़ंक्शंस एक विशिष्ट Return Value वापस करते हैं, जो बताते हैं कि वहां कोई त्रुटि हुई है या नहीं। उपयोगकर्ता फ़ंक्शंस कोल करने से पहले उन्हें उपलब्ध Return Value के बारे में सूचित किया जा सकता है और उपयोगकर्ता उचित तरीके से देख सकता है।

Exceptions: C में आमतौर पर Exceptions का समर्थन नहीं होता है, लेकिन कुछ एक्सटर्नल लाइब्रेरीज़ उन्हें समर्थन करती हैं। Exception का उपयोग त्रुटि के संदर्भ में विशेष तौर पर किया जाता है, जो अप्रत्याशित और असामान्य स्थितियों को दर्शाते हैं।

Error Handling का उदाहरण 

इस उदाहरण में, हम एक संख्या का वर्गमूल निकालने का प्रयास करेंगे। यदि संख्या नकारात्मक होती है तो हम एक त्रुटि संदेश प्रिंट करेंगे।

#include <stdio.h>
#include <math.h>

int main() {
    int num;
    float result;

    printf("Enter a number: ");
    scanf("%d", &num);

    if(num < 0) {
        printf("Error: Cannot find square root of a negative number.");
        return 0;
    }

    result = sqrt(num);

    printf("Square root of %d is %f", num, result);
    return 0;
}

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

Divide by zero errors

C भाषा में Divide by Zero errors, एक ऐसी स्थिति है जब हम एक संख्या को 0 से विभाजित करने की कोशिश करते हैं जो कि अवश्य ही असंभव है। इस प्रकार की स्थिति में, प्रोग्राम अविराम हो जाता है और कुछ समय के बाद त्रुटि के साथ बंद हो जाता है।

यदि हम नंबर 10 को 0 से विभाजित करने की कोशिश करते हैं तो एक Divide by Zero error उत्पन्न होगा जो इस प्रकार होगा:

int a = 10, b = 0, c;
c = a / b; // Divide by Zero error

इस समस्या को हल करने के लिए, हम एक if चेक लगा सकते हैं जो विभाजन से पहले नियंत्रित करता है कि विभाजन वाला संख्या 0 नहीं है। यह इस प्रकार हो सकता है:

int a = 10, b = 0, c;
if (b == 0) {
    printf("Error: Cannot divide by zero\n");
    } else {
        c = a / b;
        printf("Result: %d", c);
}

यहां, हमने if कंडीशन का उपयोग करके विभाजित करने से पहले b की मान्यता की जांच की है। अगर b की मान 0 होती है, तो हम एक संदेश प्रिंट करते हैं और विभाजन नहीं करते हैं। यदि b की मान 0 नहीं होती है, तो हम विभाजन करते हैं और उत्तर प्रिंट करते हैं।

errno, perror() and strerror() का उदाहरण 

इन सभी फ़ंक्शन का उपयोग C भाषा में Error Handling के लिए किया जाता है।

errno: यह C भाषा में pre-defined एक global variable है जो error codes को store करता है। इसका उपयोग त्रुटि कोड की जांच करने के लिए किया जाता है। यदि कोई फ़ंक्शन कुछ गलत करता है तो वह एक त्रुटि कोड रिटर्न करता है और इस error code को errno में सेट किया जाता है।

उदाहरण:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *fp;
    fp = fopen("file.txt", "r");
    if (fp == NULL) {
        printf("Error: %d\n", errno); // errno में error code होगा
        return 1;
    }
    fclose(fp);
    return 0;
}

perror(): यह C भाषा में pre-defined फ़ंक्शन है जो error code को समझने में मदद करता है। इसका उपयोग error message को print करने के लिए किया जाता है। यह पहले errno की जांच करता है और उसके आधार पर error message को print करता है।

उदाहरण:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *fp;
    fp = fopen("file.txt", "r");
    if (fp == NULL) {
        perror("Error"); // error message को print करता है
        return 1;
    }
    fclose(fp);
    return 0;
}

strerror(): यह C भाषा में pre-defined फ़ंक्शन है जो error code के लिए error message को return करता है।

उदाहरण:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *fp;
    fp = fopen("file.txt", "r");
    if (fp == NULL) {
        printf("Error: %s\n", strerror(errno)); // error message को print करता है
        return 1;
    }
    fclose(fp);
    return 0;
}

Program Exit Status 

C भाषा में, जब भी हमारी C प्रोग्राम को एक्सिक्यूट होने के बाद, वह एक integer type का exit status code रिटर्न करता है। यह exit status code, यह बताता है कि प्रोग्राम के एक्सिक्यूशन के दौरान कुछ समस्या हुई थी या नहीं, जैसे कि सही रूप से चल रहे होने का संकेत देने के लिए 0 और अन्य एरर कोड्स।

Exit status code को main() function के return statement के माध्यम से return किया जा सकता है। आमतौर पर, 0 कोड संग्रहित करना एक सफल प्रोग्राम रनिंग का संकेत देता है, जबकि अन्य कोड असफलता को संदर्भित करते हैं।

एक कुछ सामान्य exit status code का उपयोग निम्नलिखित है:
  • 0: प्रोग्राम सफलतापूर्वक संपन्न हुआ।
  • 1: प्रोग्राम में कुछ त्रुटि थी, लेकिन वह सामान्य विधि से समाप्त हुआ।
  • 2: प्रोग्राम असफल हुआ, क्योंकि इसमें कुछ अवैध इनपुट था।
  • 127: प्रोग्राम असफल हुआ, क्योंकि इसमें एक मान्य command not found है।

प्रोग्राम के exit status code का उपयोग विभिन्न एप्लीकेशन में किया जा सकता है

C भाषा में Program Exit Status को exit status या exit code के रूप में भी जाना जाता है। यह एक integer value होती है जो program के execution के दौरान operating system को बताती है कि program का execution कैसे खत्म हुआ।

Program exit status 0 सफलतापूर्वक exit होने का संकेत देता है, जबकि अन्य integer values के लिए विभिन्न errors या anomalies का संकेत देते हैं। एक program के exit status को अपनी code के अंत में exit() function का उपयोग करके set किया जा सकता है।

इसका उपयोग program के विभिन्न स्थितियों को identify करने और debugging में मदद करने के लिए किया जाता है। ज्यादातर operating systems, जैसे Unix और Windows, exit status को program के parent process तक return करते हैं, जिससे parent process उस program के समाप्त होने की जानकारी प्राप्त कर सकते हैं।

यहाँ एक उदाहरण है कि कैसे exit status को program के अंत में set किया जाता है:

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

int main() {
    int result = some_function(); // some_function() returns an integer value
    if(result != 0) {
        printf("An error occurred.");
        exit(1); // exit status is set to 1 to indicate an error
    }
    printf("Program executed successfully.");
    exit(0); // exit status is set to 0 to indicate success
}