এর মতো কোড কখনও লিখবেন না।
এর জন্য j<1000
, j/1000
শূন্য (পূর্ণসংখ্যা বিভাগ)। তাই:
(&main + (&exit - &main)*(j/1000))(j+1);
সমান:
(&main + (&exit - &main)*0)(j+1);
যা হলো:
(&main)(j+1);
কোনটি আহ্বান main
সঙ্গে j+1
।
যদি j == 1000
, তবে একই লাইনগুলি বেরিয়ে আসে:
(&main + (&exit - &main)*1)(j+1);
যা ফুটতে থাকে
(&exit)(j+1);
যা হয় exit(j+1)
এবং প্রোগ্রামটি ছেড়ে যায়।
(&exit)(j+1)
এবং exit(j+1)
মূলত একই জিনিস - C99 ing6.3.2.1 / 4 উদ্ধৃত:
একটি ফাংশন ডিজাইনার একটি এক্সপ্রেশন যা ফাংশন টাইপ আছে। এটি যখন আকারের অপারেটরের অপারেন্ড বা ইউনিারি অ্যান্ড অপারেটর ব্যতীত , " ফাংশন রিটার্নিং টাইপ " টাইপযুক্ত একটি ফাংশন ডিজাইনার এমন একটি অভিব্যক্তিতে রূপান্তরিত হয় যা " ফাংশন রিটার্নিং টাইপের পয়েন্টার " টাইপযুক্ত একটি এক্সপ্রেশনতে রূপান্তরিত হয় ।
exit
একটি ফাংশন ডিজাইনার। এমনকি অবিচ্ছিন্ন &
ঠিকানা-অপারেটর ছাড়াও , এটি কাজ করার জন্য পয়েন্টার হিসাবে বিবেচনা করা হয়। ( &
ন্যায়সঙ্গত এটি স্পষ্ট করে তোলে makes)
এবং ফাংশন কলগুলি §6.5.2.2 / 1 এবং নিম্নলিখিতটিতে বর্ণিত হয়েছে:
অভিব্যক্তি যা ডাকা ফাংশনটিকে বোঝায় সেগুলিতে ফাংশন করতে টাইপ পয়েন্টার থাকবে অকার্যকর টাইপ ব্যতীত অন্য কোনও অবজেক্ট টাইপ ফিরিয়ে আনতে ।
সুতরাং exit(j+1)
ফাংশন প্রকারের পয়েন্টার-টু-ফাংশন ধরণের স্বয়ংক্রিয় রূপান্তরকরণের কারণে কাজ করে এবং পয়েন্টার-টু-ফাংশন ধরণের (&exit)(j+1)
স্পষ্ট রূপান্তরকরণের পাশাপাশি কাজ করে।
বলা হচ্ছে, উপরোক্ত কোডটি মেনে চলছে না ( main
হয় দুটি আর্গুমেন্ট গ্রহণ করে বা &exit - &main
মোটেও কিছুই হয় না), এবং আমি বিশ্বাস করি, §§..6. / / ৯ অনুসারে অপরিবর্তিত:
যখন দুটি পয়েন্টার বিয়োগ করা হয়, উভয়ই একই অ্যারে অবজেক্টের উপাদানগুলিকে নির্দেশ করবে বা অ্যারে অবজেক্টের শেষ উপাদানটির একটিতে; ...
সংযোজনটি (&main + ...)
নিজেই বৈধ হবে এবং যুক্ত পরিমাণটি শূন্য হলে এটি ব্যবহার করা যেতে পারে , যেহেতু .5§..6..6 / says বলেছেন:
এই অপারেটরগুলির উদ্দেশ্যে, কোনও বস্তুর পয়েন্টার যা অ্যারের উপাদান নয়, বিন্দুর সাথে তার দৈর্ঘ্যের অ্যারের প্রথম এলিমেন্টের সাথে তার উপাদান ধরণের হিসাবে একই আচরণ করে।
সুতরাং শূন্য যুক্ত &main
করা ঠিক হবে (তবে বেশি ব্যবহার নয়)।
main
সি ++ এ কল করতে পারবেন না ।