সি-এ সিঙ্গেল কোটেশন (' ') এর ভেতরে একাধিক ক্যারেক্টার লিখলে (যেমন 'AB', 'ABC') সেটি একটি int কনস্ট্যান্ট হিসেবে ট्रीট হয়, যেটি ইমপ্লিমেন্টেশন-ডিফাইনড (implementation-defined)। এটিকে Multicharacter Literal বলা হয়।
উদাহরণ
#include <stdio.h>
int main() {
printf("%d\n", 'A'); // 65 (ASCII)
printf("%d\n", 'AA'); // 16705
printf("%d\n", 'ABC'); // 4276803
return 0;
}
আউটপুট (লিটল-এন্ডিয়ান সিস্টেমে, যেমন x86)
65
16705
4276803
ব্যাখ্যা (লিটল-এন্ডিয়ান)
'A'= 0x41 = 65'AA'= 0x4141 = 16705 (মেমরিতে: 41 41)'ABC'= 0x414243 = 4276803 (মেমরিতে: 41 42 43)
নোট: বিগ-এন্ডিয়ান সিস্টেমে বাইট অর্ডার উল্টো হবে (যেমন 'AB' = 0x4241)।
স্ট্যান্ডার্ড অনুযায়ী
- C স্ট্যান্ডার্ড (C99 §6.4.4.4): "The value of an integer character constant containing more than one character... is implementation-defined."
- এটি পোর্টেবল নয় — আর্কিটেকচার, কম্পাইলার, এন্ডিয়ানেস পরিবর্তলে মান পরিবর্তিত হয়
- GCC/Clang ডিফল্টে ওয়ার্নিং দেয়:
warning: multi-character character constant
কেন এটি বাঁচানো আছে?
- ইতিহাসিক কারণ (PDP-11,年初 Unix)
- কিছু লিগ্যাসি কোড/প্রোটোকল যেখানে ৪-ক্যারেক্টার কোড (FourCC) ব্যবহার হয় (যেমন
'RIFF','WAVE','fmt ')
সুপারিশ
- নতুন কোডে ব্যবহার করবেন না
- FourCC/ম্যাজিক নম্বরের জন্য
uint32_tএবং বাইট-অর্ডার স্পষ্ট করুন (যেমন0x52494646for 'RIFF') - স্ট্রিং কমপেরিজনের জন্য
strcmpবাmemcmpব্যবহার করুন