टाइप क्वालिफायर क्या हैं?
टाइप क्वालिफायर C प्रोग्रामिंग भाषा में मौजूदा डेटा प्रकारों में विशेष विशेषताएं जोड़ते हैं।
C में तीन टाइप क्वालिफायर हैं:
const, volatile, restrict (C99)।
const क्वालिफायर
const इंगित करता है कि डेटा प्रारंभिकरण के बाद बदला नहीं जा सकता।
कॉन्स्टेंट के तीन प्रकार
1. लिटरल कॉन्स्टेंट्स (साक्षर स्थिरांक)
ये अनाम स्थिरांक हैं जिनका उपयोग डेटा निर्दिष्ट करने के लिए किया जाता है।
int a = b + 7; // यहां '7' लिटरल कॉन्स्टेंट है
float pi = 3.14; // 3.14 लिटरल कॉन्स्टेंट
2. डिफाइंड कॉन्स्टेंट्स (परिभाषित स्थिरांक)
ये #define प्रीप्रोसेसर कमांड का उपयोग करते हैं।
#define PI 3.1415
#define MAX_SIZE 100
3. मेमोरी कॉन्स्टेंट्स (मेमोरी स्थिरांक)
ये const क्वालिफायर का उपयोग करते हैं, जो इंगित करता है कि डेटा बदला नहीं जा सकता।
सिंटैक्स
const प्रकार पहचानकर्ता = मान;
उदाहरण
const float PI = 3.14159;
const int MAX = 100;
const char *MESSAGE = "Hello";
उदाहरण प्रोग्राम
#include <stdio.h>
#define PI 3.1415 // डिफाइंड कॉन्स्टेंट
int main() {
const float cpi = 3.14; // मेमोरी कॉन्स्टेंट
printf("लिटरल कॉन्स्टेंट = %f\n", 3.14);
printf("डिफाइंड कॉन्स्टेंट = %f\n", PI);
printf("मेमोरी कॉन्स्टेंट = %f\n", cpi);
// cpi = 3.15; // कंपाइल त्रुटि: असाइनमेंट ऑफ रीड-ओनली वेरिएबल
return 0;
}
आउटपुट
लिटरल कॉन्स्टेंट = 3.140000
डिफाइंड कॉन्स्टेंट = 3.141500
मेमोरी कॉन्स्टेंट = 3.140000
const के उन्नत उपयोग
1. const पॉइंटर्स के साथ
// पॉइंटर टू कॉन्स्ट: मान नहीं बदल सकता
const int *ptr1;
int const *ptr2; // समान
// कॉन्स्टेंट पॉइंटर: पता नहीं बदल सकता
int *const ptr3 = &var;
// कॉन्स्टेंट पॉइंटर टू कॉन्स्ट: दोनों नहीं बदल सकते
const int *const ptr4 = &var;
2. const फ़ंक्शन पैरामीटर्स के साथ
// फ़ंक्शन सरणी को संशोधित नहीं कर सकता
void printArray(const int arr[], int size) {
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
}
// फ़ंक्शन स्ट्रिंग को संशोधित नहीं कर सकता
int stringLength(const char *str) {
int len = 0;
while (str[len]) len++;
return len;
}
3. const रिटर्न टाइप के साथ
// रिटर्न किया गया पॉइंटर संशोधित नहीं किया जा सकता
const char* getErrorMessage(int code) {
static const char *messages[] = {
"कोई त्रुटि नहीं",
"फ़ाइल नहीं मिली",
"मेमोरी त्रुटि"
};
return messages[code];
}
4. const संरचना सदस्यों के साथ
struct Config {
const int version; // प्रारंभिकरण के बाद अपरिवर्तनीय
const char *name; // पॉइंटर अपरिवर्तनीय (स्ट्रिंग लिटरल के लिए)
};
struct Config cfg = {1, "MyApp"};
// cfg.version = 2; // त्रुटि
const vs #define
| पहलू | const | #define |
|---|---|---|
| टाइप चेकिंग | हां | नहीं (टेक्स्ट प्रतिस्थापन) |
| स्कोप | ब्लॉक/फ़ाइल स्कोप | ग्लोबल (परिभाषा के बाद) |
| डिबगिंग | डिबगर में दृश्यमान | डिबगर में अदृश्य |
| मेमोरी | स्टोरेज आवंटित कर सकता है | कोई स्टोरेज नहीं |
| पता लेना | संभव | असंभव |
| पसंद | आधुनिक C में पसंदीदा | सरल स्थिरांकों के लिए ठीक |
संक्षेप
constटाइप-सेफ स्थिरांक प्रदान करता है- कंपाइल-टाइम त्रुटि पकड़ता है यदि संशोधन का प्रयास किया जाता है
- ऑप्टिमाइज़र को बेहतर कोड जनरेट करने में मदद करता है
#defineपर प्राथमिकता दें (टाइप सेफ्टी के लिए)