यहां हम देखेंगे कि C में सख्त उपनाम का उपयोग क्यों करना चाहिए। उस भाग पर चर्चा करने से पहले, आइए एक कोड देखें और आउटपुट का विश्लेषण करने का प्रयास करें।
उदाहरण
#include <stdio.h>
int temp = 5;
int *var = &temp;
int my_function(double *var) {
temp = 1;
*var = 5.10; // यह temp का मान बदल देगा
return (temp);
}
int main() {
printf("%d", my_function((double*)&temp));
}
आउटपुट
1717986918
यदि हम फ़ंक्शन my_function को कॉल करते हैं, तो यह 1 लौटाएगा। हम इसे my_function((double*)&temp) का उपयोग करके भी कॉल कर सकते हैं। यह 1 लौटाने वाला है, लेकिन यहां हम देख सकते हैं कि यह कुछ और लौटा रहा है। यह कोड केवल स्थिर 1 लौटाने के लिए बनाया गया था। इस समस्या को ठीक करने के लिए हम सख्त उपनाम (Strict Aliasing) का उपयोग कर सकते हैं।
restrict क्वालिफायर कीवर्ड का उपयोग करें। यह इंगित करता है कि हम कंपाइलर से वादा कर रहे हैं कि कुछ पॉइंटर restrict कीवर्ड के साथ उपनामित नहीं है। यदि हम अपना वादा तोड़ते हैं तो समस्याएं होंगी।