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

C भाषा में इंलाइन फ़ंक्शन (Inline Function) क्या है?

इंलाइन फ़ंक्शन क्या है?

इंलाइन फ़ंक्शन को उस स्थान पर प्रतिस्थापित किया जा सकता है जहां फ़ंक्शन कॉल हो रहा है। फ़ंक्शन प्रतिस्थापन हमेशा कंपाइलर की पसंद होती है (कंपाइलर इसे अनदेखा कर सकता है)।

विशेषताएं

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

सिंटैक्स

inline रिटर्न_टाइप फ़ंक्शन_नाम(पैरामीटर्स) {
    // फ़ंक्शन परिभाषा
}

उदाहरण प्रोग्राम

#include <stdio.h>

inline int multiply(int a, int b) {
    return a * b;
}

inline int square(int x) {
    return x * x;
}

inline int max(int a, int b) {
    return (a > b) ? a : b;
}

int main() {
    int a = 5, b = 3;
    
    printf("गुणा: %d * %d = %d\n", a, b, multiply(a, b));
    printf("वर्ग: %d^2 = %d\n", a, square(a));
    printf("अधिकतम: max(%d, %d) = %d\n", a, b, max(a, b));
    
    return 0;
}

आउटपुट

गुणा: 5 * 3 = 15
वर्ग: 5^2 = 25
अधिकतम: max(5, 3) = 5

इंलाइन vs सामान्य फ़ंक्शन

कब उपयोग करें

  • छोटे, बार-बार कॉल किए जाने वाले फ़ंक्शन (गेटर्स, सेटर्स, गणित ऑपरेशन)
  • प्रदर्शन-महत्वपूर्ण कोड जहां कॉल ओवरहेड मायने रखता है
  • हेडर फ़ाइलों में परिभाषा के साथ (एकाधिक समावेश के लिए)

कब बचें

  • बड़े फ़ंक्शन (कोड ब्लोट)
  • पुनरावर्ती फ़ंक्शन (आमतौर पर इंलाइन नहीं किया जाता)
  • फ़ंक्शन पॉइंटर के माध्यम से कॉल किए जाने वाले
  • जब पता लेने की आवश्यकता हो

C99 में इंलाइन

C99 में inline का अर्थ C++ से थोड़ा अलग है:


// हेडर फ़ाइल में (inline_defs.h)
#ifndef INLINE_DEFS_H
#define INLINE_DEFS_H

// "extern inline" - बाहरी परिभाषा प्रदान करता है
extern inline int add(int a, int b) {
    return a + b;
}

// या सिर्फ inline (C99) - परिभाषा दृश्य होनी चाहिए
inline int mul(int a, int b) {
    return a * b;
}

#endif

GCC कंपाइलर विकल्प


// इंलाइन के लिए बाध्य करें (चेतावनी: कोड ब्लोट)
__attribute__((always_inline)) inline int foo() { ... }

// इंलाइन न करें
__attribute__((noinline)) int bar() { ... }

व्यावहारिक उदाहरण: मैक्रो vs इंलाइन

// मैक्रो - टाइप अनसेफ, साइड इफेक्ट्स संभव
#define SQUARE_MACRO(x) ((x)*(x))

// इंलाइन - टाइप सेफ, कोई साइड इफेक्ट नहीं
inline int square_inline(int x) {
    return x * x;
}

int main() {
    int i = 5;
    printf("मैक्रो: %d\n", SQUARE_MACRO(i++));  // 30! (i दो बार बढ़ा)
    printf("i अब: %d\n", i);                    // 7
    
    int j = 5;
    printf("इंलाइन: %d\n", square_inline(j++)); // 25 (सही)
    printf("j अब: %d\n", j);                    // 6
    
    return 0;
}
  1. C भाषा में strncpy() फंक्शन क्या है? C भाषा में strncpy() फंक्शन क्या है?

    C लाइब्रेरी फंक्शन char *strncpy(char *dest, const char *src, size_t n) स्रोत स्ट्रिंग (src) से गंतव्य स्ट्रिंग (dest) में n कैरेक्टर्स तक कॉपी करता है। यदि src की लंबाई n से कम है, तो dest का शेष भाग नल बाइट्स से भरा जाता है। घोषणा char stringname [size]; आरंभीकरण सिंगल कैरेक्टर: char string[10]

  1. C भाषा में strcmp() फंक्शन क्या है? C भाषा में strcmp() फंक्शन क्या है?

    C लाइब्रेरी फंक्शन int strcmp(const char *str1, const char *str2) str1 द्वारा इंगित स्ट्रिंग की तुलना str2 द्वारा इंगित स्ट्रिंग से करता है। कैरेक्टर्स का ऐरे स्ट्रिंग कहलाता है। घोषणा ऐरे के लिए घोषणा निम्नलिखित है: char stringname[size]; उदाहरण: char string[50]; 50 कैरेक्टर्स लंबाई की स्ट्रिंग

  1. C भाषा में strcpy() फंक्शन क्या है? C भाषा में strcpy() फंक्शन क्या है?

    C लाइब्रेरी फंक्शन char *strcpy(char *dest, const char *src) src द्वारा इंगित स्ट्रिंग को dest में कॉपी करता है। कैरेक्टर्स का ऐरे स्ट्रिंग कहलाता है। घोषणा ऐरे के लिए घोषणा निम्नलिखित है: char stringname[size]; उदाहरण: char string[50]; 50 कैरेक्टर्स लंबाई की स्ट्रिंग आरंभीकरण सिंगल कैरेक्टर कॉ

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
पहलूसामान्य फ़ंक्शनइंलाइन फ़ंक्शन
कॉल ओवरहेडहां (पुश/पॉप, जंप)नहीं (कोड डाला जाता है)
कोड आकारछोटा (एक प्रति)बड़ा (प्रत्येक कॉल पर प्रति)
डीबगिंगआसानकठिन (कोड डुप्लिकेट)
कंपाइलर नियंत्रणहमेशा कॉलसुझाव (अनदेखा कर सकता है)
पता लेनासंभवसंभव (इंलाइन रद्द करता है)