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 কল করলে এটি ১ রিটার্ন করা উচিত। কিন্তু my_function((double*)&temp) কল করলে অন্য ফলাফল আসে। এটি হয় কারণ double* পয়েন্টার দিয়ে int মেমরি অ্যাক্সেস করা হয়েছে, যা স্ট্রিক্ট এলিয়াসিং রুল লঙ্ঘন করে।
সমাধান: restrict কিওয়ার্ড ব্যবহার করুন। এটি কম্পাইলারকে বোঝায় যে পয়েন্টারটি অন্য কোনো পয়েন্টারের সাথে এলিয়েসড নয়। প্রতিশ্রুতি ভাঙলে অনির্দিষ্ট আচরণ হতে পারে।