C भाषा में इंलाइन फ़ंक्शन (Inline Function) क्या है?
इंलाइन फ़ंक्शन क्या है?
इंलाइन फ़ंक्शन को उस स्थान पर प्रतिस्थापित किया जा सकता है जहां फ़ंक्शन कॉल हो रहा है। फ़ंक्शन प्रतिस्थापन हमेशा कंपाइलर की पसंद होती है (कंपाइलर इसे अनदेखा कर सकता है)।
विशेषताएं
इंलाइन फ़ंक्शन में, फ़ंक्शन कॉल वास्तविक प्रोग्राम कोड द्वारा प्रतिस्थापित हो जाता है
अधिकांश इंलाइन फ़ंक्शन छोटी गणनाओं के लिए उपयोग किए जाते हैं। बड़े कंप्यूटिंग के लिए उपयुक्त नहीं
एक इंलाइन फ़ंक्शन सामान्य फ़ंक्शन के समान होता है। अंतर केवल इतना है कि हम फ़ंक्शन नाम से पहले 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;
}
छोटे, बार-बार कॉल किए जाने वाले फ़ंक्शन (गेटर्स, सेटर्स, गणित ऑपरेशन)
प्रदर्शन-महत्वपूर्ण कोड जहां कॉल ओवरहेड मायने रखता है
हेडर फ़ाइलों में परिभाषा के साथ (एकाधिक समावेश के लिए)
कब बचें
बड़े फ़ंक्शन (कोड ब्लोट)
पुनरावर्ती फ़ंक्शन (आमतौर पर इंलाइन नहीं किया जाता)
फ़ंक्शन पॉइंटर के माध्यम से कॉल किए जाने वाले
जब पता लेने की आवश्यकता हो
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;
}
C लाइब्रेरी फंक्शन char *strncpy(char *dest, const char *src, size_t n) स्रोत स्ट्रिंग (src) से गंतव्य स्ट्रिंग (dest) में n कैरेक्टर्स तक कॉपी करता है। यदि src की लंबाई n से कम है, तो dest का शेष भाग नल बाइट्स से भरा जाता है।
घोषणा
char stringname [size];
आरंभीकरण
सिंगल कैरेक्टर: char string[10]
C लाइब्रेरी फंक्शन int strcmp(const char *str1, const char *str2) str1 द्वारा इंगित स्ट्रिंग की तुलना str2 द्वारा इंगित स्ट्रिंग से करता है।
कैरेक्टर्स का ऐरे स्ट्रिंग कहलाता है।
घोषणा
ऐरे के लिए घोषणा निम्नलिखित है:
char stringname[size];
उदाहरण: char string[50]; 50 कैरेक्टर्स लंबाई की स्ट्रिंग
C लाइब्रेरी फंक्शन char *strcpy(char *dest, const char *src) src द्वारा इंगित स्ट्रिंग को dest में कॉपी करता है।
कैरेक्टर्स का ऐरे स्ट्रिंग कहलाता है।
घोषणा
ऐरे के लिए घोषणा निम्नलिखित है:
char stringname[size];
उदाहरण: char string[50]; 50 कैरेक्टर्स लंबाई की स्ट्रिंग
आरंभीकरण
सिंगल कैरेक्टर कॉ