c++ - উনল - সি++ বই




চরিত্রের আকার('a') সি/সি++ তে (3)

সি এবং সি ++ চরিত্র আকার কি? যতক্ষণ আমি গৃহস্থালি আকার জানি সি এবং সি ++ উভয় মধ্যে 1 বাইট।

সি:

#include <stdio.h>
int main()
{
  printf("Size of char : %d\n",sizeof(char));
  return 0;
}

সি ++ এ:

#include <iostream>
int main()
{
  std::cout<<"Size of char : "<<sizeof(char)<<"\n";
  return 0;
}

কোন আশ্চর্য, তাদের উভয় আউটপুট দেয়: Size of char : 1

এখন আমরা জানি যে অক্ষরগুলি 'a' , 'b' , 'c' , '|' হিসাবে উপস্থাপিত হয়। , ... তাই আমি উপরের কোডগুলো এভাবে সংশোধন করেছি:

সি:

#include <stdio.h>
int main()
{
  char a = 'a';
  printf("Size of char : %d\n",sizeof(a));
  printf("Size of char : %d\n",sizeof('a'));
  return 0;
}

Output:

Size of char : 1
Size of char : 4

সি ++ এ:

#include <iostream>
int main()
{
  char a = 'a';
  std::cout<<"Size of char : "<<sizeof(a)<<"\n";
  std::cout<<"Size of char : "<<sizeof('a')<<"\n";
  return 0;
}

Output:

Size of char : 1
Size of char : 1

sizeof('a') C এবং C ++ এ ভিন্ন মানগুলি কেন দেয়?


C তে চরিত্রের অক্ষরগুলির ধরন C ++ এ int এবং char হয়। এই সি ++ এ ফাংশন ওভারলোডিং সমর্থন প্রয়োজন। এই উদাহরণটি দেখুন:

void foo(char c)
{
    puts("char");
}
void foo(int i)
{
    puts("int");
}
int main()
{
    foo('i');
    return 0;
}

আউটপুট:

char

C তে, 'a' মত চরিত্রের ধ্রুবকের ধরনটি আসলে একটি int , 4 আকারের (অথবা অন্য কোন বাস্তবায়ন-নির্ভর মান) সহ। সি ++ তে, টাইপ 1 এর আকারের সাথে char । এটি দুটি ভাষার মধ্যে অনেক ছোট পার্থক্য।


সি ভাষায় , অক্ষর আক্ষরিক একটি char টাইপ নয়। সি পূর্ণসংখ্যা হিসাবে অক্ষর আক্ষরিক বিবেচনা। সুতরাং, sizeof('a') এবং sizeof(1) মধ্যে কোন পার্থক্য নেই।

সুতরাং, sizeof অক্ষর আক্ষরিক সি মধ্যে sizeof পূর্ণসংখ্যা সমান।

সি ++ ভাষায় , চরিত্রের আক্ষরিক চরিত্র টাইপ। cppreference বলছেন:

1) সংকীর্ণ অক্ষর আক্ষরিক বা সাধারণ অক্ষর আক্ষরিক, যেমন 'a' বা '\n' বা '\13' যেমন আক্ষরিক টাইপ char এবং execution চরিত্র সেট মধ্যে সি-গৃহস্থালি প্রতিনিধিত্ব সমান মূল্য। যদি সি-চারটি এক্সিকিউশন ক্যারেক্টার সেটের মধ্যে একটি বাইট হিসাবে প্রতিনিধিত্বযোগ্য না হয়, তাহলে আক্ষরিক টাইপ int এবং বাস্তবায়ন-নির্ধারিত মান রয়েছে।

সুতরাং, সি ++ অক্ষর আক্ষরিক চরিত্র একটি ধরনের। তাই, সি ++ অক্ষর আক্ষরিক আকার এক বাইট।

Alos, আপনার প্রোগ্রামে, আপনি sizeof অপারেটর জন্য ভুল বিন্যাস sizeof ব্যবহার করেছেন।

C11 §7.21.6.1 (পি 9):

একটি রূপান্তর স্পেসিফিকেশন অবৈধ হলে, আচরণটি অনির্দিষ্ট হয় .75) যদি কোনও যুক্তি সংশ্লিষ্ট রূপান্তর স্পেসিফিকেশনটির জন্য সঠিক টাইপ না হয় তবে আচরণটি অনির্ধারিত।

সুতরাং, আপনাকে %d পরিবর্তে %zu ফর্ম্যাট স্পেসিফায়ার ব্যবহার করতে হবে, নাহলে এটি C তে অনির্ধারিত আচরণ।





types