Какой синтаксис для строк Unicode в VC ++? - PullRequest
5 голосов
/ 19 сентября 2011

Как использовать строки Юникода в VC ++?Конечно, вы должны #define UNICODE, но как насчет ваших строк?

Должен ли макрос TEXT () или _T () использоваться вокруг всего текста или вы должны просто поставить L перед строками?Я уверен, что в наши дни все программы должны использовать юникод, так что не лучше ли использовать префикс L?

Мнения?

Ответы [ 3 ]

2 голосов
/ 19 сентября 2011

Это зависит от того, чего вы хотите достичь. Если вы хотите убедиться, что ваш код будет компилироваться и работать правильно как с Юникодом, так и без него, используйте макросы TEXT или _T и вызывайте имена функций Win32 по умолчанию (например, CreateWindow).

Если вы хотите убедиться, что ваша программа всегда использует Unicode API, то вам следует использовать префикс L перед строками и вызывать широкие версии функций Win32 (например, CreateWindowW).

В последнем случае вы получите поведение Юникода независимо от того, определено UNICODE или нет. В первом случае ваше приложение изменит свое поведение в зависимости от того, определено ли UNICODE.

Я согласен с вами, что версии, не поддерживающие Юникод, на самом деле не актуальны с Win98, поэтому я бы выбрал второй подход.

1 голос
/ 19 сентября 2011

Что-то, что я узнал некоторое время назад:

Золотое правило:

Не боритесь с фреймворком.

Делайте то, что был спроектирован фреймворкомделать - если вы используете Windows, используйте _T, чтобы сделать ваш код независимым от типа символа.Если вы используете Linux, используйте UTF-8.Если у вас есть кроссплатформенный фреймворк, делайте все, что он делает.Но не пытайтесь придумать что-то свое, если у вас нет действительно веской причины для этого.(Обычно это просто не стоит усилий, направленных против фреймворка.)

1 голос
/ 19 сентября 2011

Объявление строковых литералов Unicode с префиксом L.

Макросы TEXT() или _T() были для плохих старых времен, когда вы хотели, чтобы единый источник компилировался как для Unicode, так и для не Unicode версий Windows (Windows 9x). К счастью, вы можете смело игнорировать Windows 9x сегодня.

...