এটি সি ++ এবং সি উভয় ক্ষেত্রেই সংজ্ঞায়িত করা হয়েছে এটি কঠোরভাবে আলিয়জিং আইনগুলি লঙ্ঘন করে না কারণ এটি ফলাফলের পয়েন্টারটিকে অবজ্ঞা করে না।
এখানে সি ++ (@ ইন্টারজে ও @ ভিটিটি-র ধন্যবাদ) এর উদ্ধৃতি যা এটির অনুমতি দেয়:
কোনও অবজেক্ট পয়েন্টারকে স্পষ্ট করে আলাদা ধরণের অবজেক্ট পয়েন্টারে রূপান্তর করা যায়।
সি এর উদ্ধৃতি এখানে রয়েছে (ধন্যবাদ @ স্টেটরি টেলার) যা এটির অনুমতি দেয়:
কোনও অবজেক্ট টাইপের একটি পয়েন্টারকে পয়েন্টারটিতে আলাদা আলাদা অবজেক্ট টাইপের রূপান্তর করা যেতে পারে।
এগুলি নির্দিষ্ট করে যে কোনও পয়েন্টার প্রকারটি বিনা পরিণতিতে অন্য পয়েন্টার ধরণের (এবং তারপরে optionচ্ছিকভাবে রূপান্তরিত) রূপান্তর করতে পারে।
এবং এখানে পসিক্সের উদ্ধৃতি যা এই নির্দিষ্ট ক্ষেত্রেটিকে অনুমতি দেয়:
Sockaddr_in গঠন ইন্টারনেট ঠিকানা পরিবারের জন্য ঠিকানাগুলি সংরক্ষণ করতে ব্যবহৃত হয়। সকেট ফাংশন সহ ব্যবহারের জন্য এই ধরণের পয়েন্টারগুলিকে স্ট্রাক্ট সোকাড্রেআর * এ প্রয়োগ করতে হবে।
যেহেতু এই ফাংশন ( bind
) সি স্ট্যান্ডার্ড লাইব্রেরির অংশ, ভিতরে যা কিছু ঘটে যায় (বিশেষত, টাইপ-কাস্টেড পয়েন্টারকে অবজ্ঞা করা) এর অপরিজ্ঞাত আচরণ হয় না।
আরও সাধারণ প্রশ্নের উত্তর দিতে:
সি এবং সি ++ দুটি পৃথক ভাষা। যদি কিছু সি তে সংজ্ঞায়িত করা হয় তবে সি ++ এ নয় তবে এটি সিতে সংজ্ঞায়িত করা হয় তবে সি ++ তে নয়। দুটি ভাষার মধ্যে কোনও অন্তর্নিহিত সামঞ্জস্যতা এটি পরিবর্তন করবে না। আপনি যদি সি ব্যবহার করতে চান যা সি-তে সংজ্ঞায়িত তবে সি ++ এ সংজ্ঞায়িত হয়েছে, আপনাকে কোডটি সংকলনের জন্য একটি সি সংকলক ব্যবহার করতে হবে।