প্রশ্ন দ্বিগুণ: প্রথমত, হয়
char c = CHAR_MAX;
c += 1;
থেকে পৃথকভাবে মূল্যায়ন
char c = CHAR_MAX;
c = c + 1;
এবং উত্তরটি হ'ল এটি নয় , কারণ সি 11 / সি 18 6.5.16.2p3 :
- ফর্মের একটি যৌগিক কার্যনির্বাহী
E1 op = E2সহজ অ্যাসাইনমেন্ট এক্সপ্রেশনের সমতুল্য E1 = E1 op (E2)ব্যতীত লভ্যালুটি একবারে E1মূল্যায়ন করা হয় এবং অনির্দিষ্টভাবে-সিকোয়েন্সড ফাংশন কলের সাথে সম্মিলিতভাবে একটি যৌগিক কার্য সম্পাদন একক মূল্যায়ন। যদি E1পারমাণবিক ধরণের থাকে, তবে যৌগিক কার্যভারণ্য হ'ল memory_order_seq_cstমেমরি অর্ডার সিনটিক্স সহ একটি রিড-মডিফাই-রাইটিং অপারেশন । 113)
তারপরে, প্রশ্নটি কী হয় c = c + 1। এখানে অপারেটরগুলি +সাধারণ গাণিতিক রূপান্তরগুলি ভোগ করতে চলেছে cএবং 1তাই উন্নত হয় int, যদি না সত্যিকারের অসম্পূর্ণ আর্কিটেকচারের প্রয়োজন হয় যার charজন্য প্রচার করা হয় unsigned int। +তারপরে গণনাটি মূল্যায়ন করা হয় এবং ফলাফল int/ প্রকারের ফলাফলটি unsigned intআবার রূপান্তরিত হয় charএবং এতে সঞ্চিত থাকে c।
আছে 3 বাস্তবায়ন-সংজ্ঞায়িত উপায়ে এই তারপর মূল্যায়ন করা যেতে পারে:
CHAR_MIN0 এবং তাই charস্বাক্ষরবিহীন।
হয় charতারপর প্রচারিত হয় intবা হয় unsigned intএবং যদি এটি প্রচারিত হয় intতবে CHAR_MAX + 1অগত্যা এটি intখুব উপযুক্ত হবে এবং উপচে পড়বে না, বা unsigned intএটি ফিট বা শূন্যের চারপাশে আবৃত হতে পারে। যখন পরিবর্তিত মান, যা সংখ্যার দিক থেকে হয় CHAR_MAX + 1বা 0মডিউল কমানোর পরে, ফিরে আসবে c, মডুলো হ্রাসের পরে এটি 0 হয়ে যাবে, অর্থাৎCHAR_MIN
অন্যথায় charস্বাক্ষরিত হয়, তারপরে যদি এটিরCHAR_MAX চেয়ে ছোট হয় INT_MAXতবে ফলাফলটি CHAR_MAX + 1একটি মাপসই করা যায় intএবং মানক সি 11 / সি 18 .3.৩.১.৩.২০ নিয়োগের পরে রূপান্তরটির ক্ষেত্রে প্রযোজ্য :
- অন্যথায়, নতুন ধরণের স্বাক্ষরিত এবং এতে মানটি উপস্থাপন করা যায় না; হয় ফলাফল বাস্তবায়ন সংজ্ঞায়িত হয় বা বাস্তবায়ন সংজ্ঞায়িত সংকেত উত্থাপিত হয়।
বা, iff sizeof (int) == 1 এবং char স্বাক্ষরিত হয়ে থাকে, তারপরে charএকটি হিসাবে প্রচারিত হয় intএবং CHAR_MAX == INT_MAX=> এর CHAR_MAX + 1ফলে একটি পূর্ণসংখ্যার ওভারফ্লো হবে এবং আচরণটি অপরিবর্তিত থাকবে ।
অর্থাৎ সম্ভাব্য ফলাফলগুলি হ'ল:
যদি charস্বাক্ষরবিহীন পূর্ণসংখ্যার টাইপ হয় তবে ফলাফলটি সর্বদা 0, অর্থাৎ CHAR_MIN।
অন্যথায় charএকটি স্বাক্ষরিত পূর্ণসংখ্যা টাইপ, এবং আচরণটি বাস্তবায়ন-সংজ্ঞায়িত / অপরিজ্ঞাত:
CHAR_MIN বা কিছু অন্যান্য বাস্তবায়ন-সংজ্ঞায়িত মান,
- একটি বাস্তবায়ন-সংজ্ঞায়িত সংকেত উত্থাপিত হয়, সম্ভবত প্রোগ্রামটি শেষ করে,
- বা আচরণটি এমন কিছু প্ল্যাটফর্মে যেখানে অপরিবর্তিত রয়েছে
sizeof (char) == sizeof (int)।
সকল বৃদ্ধি অপারেশন c = c + 1, c += 1, c++এবং ++cএকই প্ল্যাটফর্মে একই পার্শ্বপ্রতিক্রিয়া আছে। অভিব্যক্তির মূল্যায়নকৃত মানটি ইনক্রিমেন্টের আগে c++মূল্য হবে c; অন্য তিনটির জন্য, এটি cইনক্রিমেন্টের পরে মূল্য হবে ।