প্রশ্ন দ্বিগুণ: প্রথমত, হয়
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_MIN
0 এবং তাই 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
ইনক্রিমেন্টের পরে মূল্য হবে ।