موسسه خیریه محک

شهر ریاضی بازی-ریاضی

نوع داده‌ی wchar

+2 امتیاز
1,686 نمایش

نوع داده‌ی wchar چیه و توی چه نسخه‌هایی از C++ یا کامپایلرهایی به کار می‌ره. بعد اینکه اگه من از این متغیر استفاده کنم و کدم رو کامپایل کنم ممکنه توی کامپیوتری اجرای برنامه‌م مشکل داشته باشه؟

در ++C زبانی بسیار کوچک‌تر و پاکیزه‌تر در تلاش برای خروج است. (Bjarne Stroustrup)
پرسیده شده دوشنبه ۲۹ آبان ۱۳۹۱ در C++ توسط برنامه‌نویس  
بازتگ شده چهارشنبه ۲۱ فروردین ۱۳۹۲ توسط admin

3 پاسخ

+1 امتیاز
 
بهترین پاسخ

wchar_t یک نوع داده‌ی اولیه است که در هسته‌ی اصلی زبان C++ قرار نداره. یعنی جزو الزاماتی که هر پیاده‌سازی از C++ باید حتماً داشته باشه نیست.

البته در استاندارد C++11 دیگه موجود هست.

با این هدف ایجاد شده که بزرگ‌ترین میدان انواع کاراکترهای تعریف شده رو قبول کنه. یعنی مثلاً اگه یه مجموعه‌ی کاراکتر استاندارد داریم که از ۱۶ بایت هم بیشتر کاراکتر قبو می‌کنه wchar_t طوری پیاده می‌شه که ۳۲ بیت باشه.

به زبان ساده برای کار کردن به کاراکترهایی بزرگ‌تر از اسکی یعنی یونیکد طراحی شده. یه نمونه‌ی استفاده‌ش کاراکترهای زبان‌های دیگه غیر از انگلیسی هست. کاراکترهای انگلیسی به همراه اعداد انگلیسی و چند کاراکتر دیگه در اسکی تعریف شده هستند و بنابراین زبان انگلیسی با نوع داده‌ی char مشکلی نداره. اما اگه بخوایم با کاراکترهایی علاوه بر اسکی کار کنیم char کار ما رو پیس نمی‌بره.

اولین مشکل کار با char این هست که ۱ بایت (معمولاً ۸ بیت) بیشتر نیست و بنابراین نمی‌شه تعداد زیادی کاراکتر رو پوشش بده. برای غلبه بر این مشکل یونیکد طراحی شده و برای استفاده از یونیکد در C++ کاراکتر گسترده (wchar_t) تعریف شده.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده شنبه ۱۰ فروردین ۱۳۹۲ توسط prodo  
انتخاب شده شنبه ۱۸ خرداد ۱۳۹۲ توسط admin

میشه با مثال بگین؟

یه اشتباه تو پاسخ خودم. این نوع داده یه نوع داده‌ی استاندارده. البته دقیقاً هنوز با مفاهیم استاندارد، پیاده‌سازی و هسته‌ی اصلی تو این مورد یه کم مشکل دارم. باید باز هم بخونم

+4 امتیاز

wide character (کاراکتر عریض) یک نوع داده‌ی کاراکتری در کامپیوتره که عموما اندازه‌ای بزرگتر از کاراکتر 8 بیتی داره که این سایز اضافه‌شده امکان استفاده از مجموعه کاراکترهای کد شده‌ی بزرگتری رو میده.
همچنین wchart نوع داده‌ایه که برای نمایش کاراکترهای عریض استفاده میشه که 16 بیت رو اشغال میکنه. این نوع داده 2 یا 4 بایت رو در اختیار میگیره.
و wchar
t بیشتر مواقعی به کار میره که لازم باشه از زبان دیگری مثلا ژاپنی استفاده بشه.
wchart یک نوع داده متفاوت بصورت typedef هست که در C++ استاندارد شناخته میشه. ولی wchar غیر استاندارده و تا جایی که میدونم تنها در ویندوز وجود داره.
بطور عمده wchar که برای معرفی نوع داده کاراکتر عریض به هر کامپایلری که معرفی بشه، wchar
t هم در اونجا شناخته میشه.
بنابراین بهتره که از wchar_t برای تعریف کاراکتر عریض مد نظرتون استفاده کنید.
مثال:

#include <iostream.h>
   void main()

{   
  wchar_t w;
  w = L'A';
  cout << "Wide character value::" << w << '\n';
  cout << "Size of the wide char is::" << sizeof(w);
}

نتیجه:

Wide character value::65
Size of the wide char is::2
پاسخ داده شده دوشنبه ۱۲ فروردین ۱۳۹۲ توسط CPP_Crawler4  

یعنی چی ۱۶ بیت داره اما ۲ یا ۴ بایت اشغال می‌کنه؟
این typedef بودن مال نسخه‌های قدیمی هست و شاید هم C. در نگارش جدید C++ یه نوع داده‌ی جدیده

+1 امتیاز

wchar یعنی Wide Character type و تو تمام کامپایلرها نيست(تا جایی که من خوندم و میدونم)
ولی wchar_t تو تمام کامپایلرها هست...

Don't Expect Anyone Except Yourself,...
پاسخ داده شده چهارشنبه ۷ فروردین ۱۳۹۲ توسط Arash  
ویرایش شده دوشنبه ۲ اردیبهشت ۱۳۹۲ توسط Arash

به چه کاری میان؟

+۱ برای اشاره در مورد تفاوت دو نوع داده

یه اتفاق بد! wchar مخصوص استفاده‌ی مایکروسافته. wchar_t استاندارد C++. اینی که گفتین دقیقاً برعکسه

اصلاح شد.
ممنون