Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में कस्टम हेडर फ़ाइल (Custom Header Files) बनाना और उपयोग करना

समस्या

क्या उपयोगकर्ता C भाषा में अपनी खुद की कस्टम हेडर फ़ाइलें बना सकता है? यदि हां, तो उपयोगकर्ता-परिभाषित हेडर फ़ाइलों को कैसे एक्सेस करें?

समाधान

हां, उपयोगकर्ता C में अपनी खुद की कस्टम हेडर फ़ाइलें बना सकता है।

यह उपयोगकर्ता-परिभाषित विधियों, ग्लोबल चरों और संरचनाओं को एक अलग फ़ाइल में प्रबंधित करने में मदद करता है, जिसे विभिन्न मॉड्यूल में उपयोग किया जा सकता है।

उदाहरण: कस्टम हेडर फ़ाइल बनाना और उपयोग करना

चरण 1: हेडर फ़ाइल बनाएं (swap.h)

/* swap.h - कस्टम हेडर फ़ाइल */
#ifndef SWAP_H
#define SWAP_H

// फ़ंक्शन घोषणा (प्रोटोटाइप)
void swap(int *a, int *b);

#endif

चरण 2: कार्यान्वयन फ़ाइल (swap.c)

/* swap.c - कार्यान्वयन */
#include "swap.h"

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

चरण 3: मुख्य प्रोग्राम (main.c)

/* main.c - मुख्य प्रोग्राम */
#include <stdio.h>
#include "swap.h"  // कस्टम हेडर फ़ाइल शामिल करें

int main() {
    int a = 40, b = 60;
    
    printf("स्वैप से पहले: a=%d, b=%d\n", a, b);
    
    swap(&a, &b);  // हेडर में घोषित फ़ंक्शन कॉल करें
    
    printf("स्वैप के बाद: a=%d, b=%d\n", a, b);
    
    return 0;
}

कंपाइल और रन

# दोनों फाइलें कंपाइल करें और लिंक करें
gcc main.c swap.c -o program

# चलाएं
./program

आउटपुट

स्वैप से पहले: a=40, b=60
स्वैप के बाद: a=60, b=40

महत्वपूर्ण नियम

  • एक्सटेंशन: हेडर फ़ाइलों का एक्सटेंशन .h होता है
  • समान फ़ोल्डर: दोनों फ़ाइलें (हेडर और मुख्य) एक ही फ़ोल्डर में होनी चाहिए
  • कोट्स vs एंगल ब्रैकेट:
    • #include <stdio.h> - सिस्टम हेडर (मानक लाइब्रेरी)
    • #include "swap.h" - उपयोगकर्ता-परिभाषित हेडर (वर्तमान निर्देशिका में खोजता है)
  • हेडर गार्ड: #ifndef/#define/#endif बहु-समावेश रोकता है
  • केवल घोषणाएं: हेडर में आमतौर पर केवल प्रोटोटाइप, स्थिरांक, संरचना परिभाषाएं होती हैं
  • परिभाषाएं नहीं: फ़ंक्शन बॉडी, ग्लोबल चर परिभाषाएं .c फ़ाइल में होनी चाहिए

उन्नत उदाहरण: एकाधिक फ़ाइलें और संरचना

math_utils.h

#ifndef MATH_UTILS_H
#define MATH_UTILS_H

#define PI 3.14159265359

int factorial(int n);
float circleArea(float radius);
float circleCircumference(float radius);

#endif

math_utils.c

#include "math_utils.h"

int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

float circleArea(float r) {
    return PI * r * r;
}

float circleCircumference(float r) {
    return 2 * PI * r;
}

main.c

#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("PI = %.5f\n", PI);
    printf("5! = %d\n", factorial(5));
    printf("त्रिज्या 3 का क्षेत्रफल: %.2f\n", circleArea(3));
    printf("त्रिज्या 3 की परिधि: %.2f\n", circleCircumference(3));
    return 0;
}

लाभ

  • मॉड्यूलरिटी: कोड को तार्किक मॉड्यूल में विभाजित करता है
  • पुन: उपयोग: फ़ंक्शंस कई प्रोग्राम्स में उपयोग योग्य
  • रखरखाव: कार्यान्वयन बदलने पर कॉलर अप्रभावित
  • टीम कार्य: अलग-अलग डेवलपर अलग-अलग मॉड्यूल पर काम कर सकते हैं
  • कंपाइलेशन समय: केवल बदली हुई फ़ाइलें पुनः कंपाइल होती हैं
  1. C भाषा में कैरेक्टर ऑपरेशन्स को समझें C भाषा में कैरेक्टर ऑपरेशन्स को समझें

    C प्रोग्रामिंग भाषा में कैरेक्टर (A-Z या a-z), अंक (0-9), व्हाइट स्पेस, या विशेष प्रतीक हो सकते हैं। घोषणा (Declaration) C प्रोग्रामिंग में कैरेक्टर ऑपरेशन्स के लिए घोषणा निम्नलिखित है: char a = A; // कैरेक्टर कॉन्स्टेंट का उपयोग करके कैरेक्टर इनपुट/आउटपुट फंक्शन्स कैरेक्टर इनपुट/आउटपुट फंक्शन्स

  1. C भाषा में यूनियन टू पॉइंटर (Union to Pointer) C भाषा में यूनियन टू पॉइंटर (Union to Pointer)

    यूनियन (Union) क्या है? यूनियन एक यूजर-डिफाइंड डेटा प्रकार है जो एक ही मेमोरी स्थान को विभिन्न डेटा प्रकारों के सदस्यों के लिए साझा करने की अनुमति देता है। किसी भी समय केवल एक सदस्य ही मान रख सकता है। यूनियन की घोषणा union यूनियन_नाम { डेटा_प्रकार सदस्य1; डेटा_प्रकार सदस्य2; // ... };

  1. C भाषा में पॉइंटर एक्सेस करने की अवधारणा C भाषा में पॉइंटर एक्सेस करने की अवधारणा

    पॉइंटर घोषणा, प्रारंभिकरण और एक्सेस 1. सामान्य चर int qty = 179; // मेमोरी में: पता 1000 पर मान 179 संग्रहीत 2. पॉइंटर घोषणा int *p; // p एक पॉइंटर चर है जो int का पता रख सकता है 3. पॉइंटर प्रारंभिकरण int qty = 175; int *p; p = &qty; // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें मेमोरी आर