C/C++ স্ট্যান্ডার্ড তিনটি ক্যাটাগরি নির্ধারিত করেছে:
১. Undefined Behavior (UB) - অনির্দিষ্ট আচরণ
স্ট্যান্ডার্ড কোনো বাধ্যতা দেয় না। যেকোনো কিছুই ঘটতে পারে: ক্র্যাশ, সাইলেন্ট ভুল রেজাল্ট,見える মতো ঠিক কাজ।
উদাহরণ: i++ + ++i, u = (u++), বাউন্ডস বাইরে অ্যাক্সেস, NULL ডিরেফারেন্স।
২. Implementation-Defined Behavior - ইমপ্লিমেন্টেশন-নির্দিষ্ট আচরণ
স্ট্যান্ডার্ড একাধিক পথ দেয়, কম্পাইলার/ওএস-কে একটি বেছে নিয়ে ডকুমেন্ট করতে হয়। সেই বেছে নেওয়া পথটি নিশ্চিত থাকবে।
উদাহরণ: int-এর আকার, শিফ্ট অপারেটরের আচরণ, সাইনড ইন্টিজার রিপ্রেজেন্টেশন (two's complement ইত্যাদি)।
৩. Unspecified Behavior - অনির্দিষ্ট আচরণ (নন-ডকুমেন্টেড)
স্ট্যান্ডার্ড একাধিক পথ দেয়, কিন্তু ইমপ্লিমেন্টারকে ডকুমেন্ট করতে হয় না। প্রোগ্রাম রানটাইমে যেকোনো একটি পথ নিতে পারে, এবং সেটি রানটু রান ভিন্ন হতে পারে।
উদাহরণ: ফাংশন আর্গুমেন্ট ইভ্যালুয়েশন অর্ডার (f(a(), b()) - a() বা b() पहले কল হবে?), মেমরি অ্যালোকেশন অ্যাড্রেস।
সারসংক্ষেপ
| বিষয় | UB | Implementation-Defined | Unspecified |
|---|---|---|---|
| স্ট্যান্ডার্ড কি বলে? | কিছুই না | একটি বেছে নিন এবং ডকুমেন্ট করুন | একটি বেছে নিন, ডকুমেন্ট লাগবে না |
| প্রোগ্রামার কি করবেন? | সবসময় এড়াবেন | ডকুমেন্টেশন পড়ে ফিক্স করুন | এই আচরণের ওপর নির্ভর করবেন না |