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

সি ভাষায় সিঙ্গেল কোটেশনে একাধিক ক্যারেক্টার অ্যাসাইন করা (Multicharacter Literals)

সি-এ সিঙ্গেল কোটেশন (' ') এর ভেতরে একাধিক ক্যারেক্টার লিখলে (যেমন '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 এবং বাইট-অর্ডার স্পষ্ট করুন (যেমন 0x52494646 for 'RIFF')
  • স্ট্রিং কমপেরিজনের জন্য strcmp বা memcmp ব্যবহার করুন
  1. C প্রোগ্রামিং ভাষায় অ্যারে অফ পয়েন্টার্স ব্যাখ্যা

  2. স্ট্রাকচার কনসেপ্ট ব্যবহার করে সি ভাষায় বিট ফিল্ড ব্যাখ্যা

  3. সি ভাষায় ইউনিয়ন টু পয়েন্টার ব্যাখ্যা

  4. পাইথনে ascii() ফাংশন