কম্পিউটার টিউটোরিয়াল

C/C++-এ Undefined, Unspecified, Implementation-Defined Behavior পার্থক্য

C/C++ স্ট্যান্ডার্ড তিনটি ক্যাটাগরি নির্ধারিত করেছে:

১. Undefined Behavior (UB) - অনির্দিষ্ট আচরণ

স্ট্যান্ডার্ড কোনো বাধ্যতা দেয় না। যেকোনো কিছুই ঘটতে পারে: ক্র্যাশ, সাইলেন্ট ভুল রেজাল্ট,見える মতো ঠিক কাজ।

উদাহরণ: i++ + ++i, u = (u++), বাউন্ডস বাইরে অ্যাক্সেস, NULL ডিরেফারেন্স।

২. Implementation-Defined Behavior - ইমপ্লিমেন্টেশন-নির্দিষ্ট আচরণ

স্ট্যান্ডার্ড একাধিক পথ দেয়, কম্পাইলার/ওএস-কে একটি বেছে নিয়ে ডকুমেন্ট করতে হয়। সেই বেছে নেওয়া পথটি নিশ্চিত থাকবে।

উদাহরণ: int-এর আকার, শিফ্ট অপারেটরের আচরণ, সাইনড ইন্টিজার রিপ্রেজেন্টেশন (two's complement ইত্যাদি)।

৩. Unspecified Behavior - অনির্দিষ্ট আচরণ (নন-ডকুমেন্টেড)

স্ট্যান্ডার্ড একাধিক পথ দেয়, কিন্তু ইমপ্লিমেন্টারকে ডকুমেন্ট করতে হয় না। প্রোগ্রাম রানটাইমে যেকোনো একটি পথ নিতে পারে, এবং সেটি রানটু রান ভিন্ন হতে পারে।

উদাহরণ: ফাংশন আর্গুমেন্ট ইভ্যালুয়েশন অর্ডার (f(a(), b()) - a() বা b() पहले কল হবে?), মেমরি অ্যালোকেশন অ্যাড্রেস।

সারসংক্ষেপ

বিষয়UBImplementation-DefinedUnspecified
স্ট্যান্ডার্ড কি বলে?কিছুই নাএকটি বেছে নিন এবং ডকুমেন্ট করুনএকটি বেছে নিন, ডকুমেন্ট লাগবে না
প্রোগ্রামার কি করবেন?সবসময় এড়াবেনডকুমেন্টেশন পড়ে ফিক্স করুনএই আচরণের ওপর নির্ভর করবেন না
  1. C++-এ struct এবং typedef struct-এর পার্থক্য

  2. C++-এ new অপারেটর এবং operator new-এর পার্থক্য কী?

  3. C++-এ 'struct' এবং 'typedef struct'-এর পার্থক্য

  4. C++ স্ট্রিং কনস্ট্যান্ট এবং ক্যারেক্টার কনস্ট্যান্টের পার্থক্য