Чем отличается tchar от wchar
Перейти к содержимому

Чем отличается tchar от wchar

What is difference between TCHAR and WCHAR?

I’ve opened winnt.h header file and found there this two lines:

but there was comment in one of my posts that there is some difference between them. Then what is the difference?

4 Answers 4

If you read the entire header, you will find:

or words to that effect.

Perhaps MS has removed the narrow option of late.

TCHAR can be either char or WCHAR based on the platform. WCHAR is always a 16-bit Unicode character, wchar_t .

A WCHAR if UNICODE is defined, a CHAR otherwise.

A 16-bit Unicode character. For more information, see Character Sets Used By Fonts.

Technically speaking there is no difference because you cannot typedef two different entities to a single one. Let us See An Example.

This Definition Works But If a Change The Above Definition To This

Error 1 error C2040: ‘b’ : ‘a’ differs in levels of indirection from ‘char *’

Another One

Error 1 error C2371: ‘b’ : redefinition; different basic types

В чем разница между TCHAR и WCHAR?

Я открыл файл заголовка winnt.h и нашел там две строки:

4 ответа

Если вы прочитаете весь заголовок, вы найдете:

Или слова на этот счет.

Возможно, в последнее время MS убрала узкую опцию.

TCHAR может быть либо char , либо WCHAR в зависимости от платформы. WCHAR всегда является 16-битным символом Юникода, wchar_t .

WCHAR, если определен UNICODE, в противном случае — CHAR.

16-битный символ Юникода. Для получения дополнительной информации см. Наборы символов, используемые шрифтами.

Технически говоря, нет никакой разницы, потому что вы не можете назначить две разные сущности одной. Давайте посмотрим на пример .

Это определение работает, но если изменить на это определение, приведенное выше

Ошибка 1, ошибка C2040: ‘b’: ‘a’ отличается по уровням косвенности от ‘char *’

Еще один

Ошибка 1 ошибка C2371: ‘b’: переопределение; различные базовые типы

Итак, анализируя эти вещи, можно определить вместе только один и тот же тип.

Чем отличается tchar от wchar

Профиль
Группа: Участник
Сообщений: 217
Регистрация: 7.11.2007

Репутация: 1
Всего: 3

Объясните пожалуйста чем отличаеться WCHAR от TCHAR и чем они оба отличаються от char. Я знаю что char и WCHAR это два разных набора символов. То есть в char используеться по- моему один байт для символа а в WCHAR несколько. А что такое TCHAR? И еще почему перед одной строкой символов надо ставить _T("Hello All") а перед другой TEXT("Hello All") а еще бывает и так L"Hello All".

Это сообщение отредактировал(а) kurlyak — 3.11.2009, 17:44

Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118

Цитата
А что такое TCHAR? И еще почему перед одной строкой символов надо ставить _T("Hello All") а перед другой TEXT("Hello All") а еще бывает и так L"Hello All".

макрос TEXT объявлен в WinNT.h, макрос _T объявлен в tchar.h. Cуть (и результат работы) одна и таже — сделать из строк L"text" в случае unicode проекта, и сделать "text" в обратном.

Цитата
чем отличаеться WCHAR от TCHAR

в случае задефайненого _UNICODE (иначе выставленного проекта как unicode) TCHAR превратится в char, иначе в wchar_t, WCHAR же останется wchar_t независимо от настроек. Это просто windows-specific типы. Используйте преумущественно TCHAR (чтобы скомпилировать ANSI версию уметь), впрочем на это можно забить — сейчас никому не нужны ANSI версии программ в винде.

sizeof(wchar_t)=2 в винде и представляет собой кодировку UCS-2 (юникод)
sizeof(char)=1 в винде и представляет собой ANSI кодировку

(если речь идет о символах, а не о числах).

Профиль
Группа: Участник
Сообщений: 217
Регистрация: 7.11.2007

Репутация: 1
Всего: 3

Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26

Цитата(kurlyak @ 3.11.2009, 22:37 )
TCHAR str[256] и wchar_t str[256] то это одно и то же?
Цитата(kurlyak @ 3.11.2009, 22:37 )
Большое спасибо jonie за ответ мне еще бы хотелось популярно узнать что такое L"My Text" и чем он отличаеться от TEXT() и _T()?

L "My Text" — это мы говорим компилятору что эта строка юникодная.
TEXT () и _T () ничем не отличаются, опять-же в UNICODE проекте TEXT ( "My Text" ) и _T ( "My Text" ) будут развернуты как L "My Text" , а в ANSI будет просто "My Text" .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *