2010-06-03 2 views
2

Я по-прежнему вижу советы по использованию типов LPTSTR/TCHAR и т. Д. Вместо LPWSTR/WCHAR. Я считаю, что материал Unicode был хорошо представлен на Win2k, и я откровенно не пишу код для Windows 98. (Разумеется, за исключением особых случаев.) Учитывая, что я не забочусь о Windows 98 (или, что еще меньше, ME), поскольку это десятилетняя ОС, есть ли причина использовать совместимость TCHAR и т. Д. Типов? Почему бы еще посоветовать людям использовать TCHAR - какая польза от него добавляется с помощью WCHAR?Являются ли вызовы API Win32 по-прежнему актуальными?

+1

Как и http://stackoverflow.com/questions/234365/is-tchar-still-relevant – dan04

+0

Я не видел, чтобы разработчики предлагали использовать 'TCHAR's. Однако я видел, как разработчики предлагали быть последовательными. Если вы вызываете общую версию API (например, «CreateFile'), тогда вам нужно быть последовательным и передавать« LPCTSTR ». Вы уверены, что не смешиваете их? – IInspectable

ответ

1

Если кто-то говорит вам, чтобы идти до 1.000.000 линий, не _UNICODE C++, с большим количеством объявлений используя char вместо wchar_t или TCHAR или WCHAR, вам лучше быть готовым справиться с API, не Unicode Win32. Конверсия в больших масштабах является довольно дорогостоящей, и, возможно, это не то, за что готовы платить деньги за источник.

Что касается нового кода, ну, есть так много примеров кода там с помощью TCHAR, что может быть проще вырезать и вставить, и в некоторых случаях некоторые трения между WCHAR в wchar_t и WCHAR как unsigned short.

Кто знает, может быть, когда-нибудь MS добавит тип данных UTF-32 под TCHAR?

+0

Интересный вопрос о возможности расширения TCHAR. Вряд ли, хотя UTF-32, скорее всего, займет значительно больше места на почти каждый кусок фактического текста. HTML5 полностью отвергает его как кодировку. – kibibu

+0

@kib комментарий UTF-32 должен был быть юмористическим. – bmargulies

+0

@bmargulies К сожалению:/ – kibibu

0

На самом деле, версии Unicode функций были введены с Win32 в 1993 году с Windows NT 3.1. Фактически, на основе oses на основе NT почти все функции * A просто преобразуются в Unicode и вызывают версию * W внутри. Кроме того, поддержка функций * W на 9x существует через Microsoft Layer for Unicode.

Для новых программ я бы определенно рекомендовал напрямую использовать макросы TCHAR или WCHAR. Я сомневаюсь, что MS будет добавлять поддержку любых других размеров персонажа во время жизни NT. Для существующих кодовых баз я полагаю, что это будет зависеть от того, насколько важно поддерживать Unicode и затраты на его исправление. Функции * A должны оставаться в Win32 навсегда для обратной совместимости.