كيفية استخدام واسع سلسلة حرفية في c++ دون وضع L أمام كل واحد

StackOverflow https://stackoverflow.com/questions/260125

  •  06-07-2019
  •  | 
  •  

سؤال

عليك أن يغفر جهلي ولكن أنا لا يستعمل على نطاق مجموعات الأحرف في c++, ولكن هل هناك طريقة التي يمكن استخدامها على نطاق سلسلة حرفية في c++ دون وضع L أمام كل الحرفي ؟

إذا كان الأمر كذلك ، كيف ؟

هل كانت مفيدة؟

المحلول

لا، ليست هناك. لديك لاستخدام البادئة L (أو ماكرو مثل _T () مع VC ++ التي تتسع لL على أي حال عندما جمعت يونيكود).

نصائح أخرى

الجديد C++0x معيار يحدد طريقة أخرى للقيام بذلك:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

وعلى صعيد ذات صلة .. أنا أحاول أن تفعل ما يلي

#define  get_switch( m )   myclass::getSwitch(L##m)

والذي هو الماكرو ستوسع

get_switch(isrunning)

في

myclass::getswitch(L"isrunning")

وهذا يعمل بشكل جيد في ج ++ visualstudio 2008

ولكن عندما جمع نفس الرمز في ظل ماك إكس كود (آي فون) أحصل على خطأ:

error: 'L' was not defined in this scope.

وتحرير: الحل

#define  get_switch( m )   myclass::getSwitch(L ## #m)

وهذا يعمل على كلا الرأسمالي ++ وكسكودي ماك (دول مجلس التعاون الخليجي)

لماذا لا تريد بادئة سلسلة حرفية مع L؟ انها بسيطة جدا - سلاسل دون L هي سلاسل ANSI (const char*)، سلاسل مع L هي حرف واسعة سلاسل (const wchar_t*). هناك الماكرو TEXT()، مما يجعل سلسلة حرفية إلى ANSI أو سلسلة حرف واسعة اعتمادا على المشروع الحالي وتعيين لاستخدام Uncode:


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

وهناك أيضا الماكرو _T()، وهو ما يعادل TEXT().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top