Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: _T  (Прочитано 11366 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


_T
« : 26-12-2005 13:41 » 

объясните кто-нибудь назначение этих хитрых макросов Отлично

#define __T(x)      x
#define _T(x)       __T(x)
Записан

Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 26-12-2005 13:49 » 

Это вроде как для портируемости кода сделано.
Если макрос _UNICODE определен, то значение преобразуется в юникод-строку (L).
Если не определен - ничего не происходит.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 26-12-2005 14:46 » 

то есть _T или __T будут где-то переопределены?
Записан

npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 26-12-2005 15:11 » 

назначение этих макросов -- в зависимости от макроса UNICODE делать ASCII или юникодные строки.  В своём посте ты привёл определения макросов для не юникодного случая.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
LP
Помогающий

ru
Offline Offline

« Ответ #4 : 30-12-2005 14:24 » new

Вот еще отрывок из Рихтера:

...
Можно также определять указатели на строки:
Код:
TCHAR *szError = "Error";
Правда, в этом операторе есть одна проблема. По умолчанию компилятор Microsoft С++ транслирует строки как состоящие из символов ANSI, а не Unicode. В итоге этот оператор нормально компилируется, если _UNICODE не определен, но в ином случае дает ошибку. Чтобы компилятор сгенерировал Unicode-, a не ANSI-строку, оператор надо переписать так:
Код:
TCHAR *szError = L"Error";
Заглавная буква L перед строковым литералом указывает компилятору, что его надо обрабатывать как Unicode-строку. Тогда, размещая строку в области данных программы, компилятор вставит между всеми символами нулевые байты. Но возникает другая проблема — программа компилируется, только если _UNICODE определен. Следовательно, нужен макрос, способный избирательно ставить L перед строковым литералом. Эту работу выполняет макрос _TEXT, также содержащийся в Tchar.h. Если _UNICODE определен, _TEXT определяется как:
Код:
#define _TEXT(x) L ## x
В ином случае _TEXT определяется следующим образом:
Код:
#define _TEXT(x) x
Используя этот макрос, перепишем злополучный оператор так, чтобы его можно было корректно компилировать независимо от того, определен _UNICODE или нет:
Код:
TCHAR *szError = _TEXT("Error");
Макрос _TEXT применяется и для символьных литералов. Например, чтобы проверить, является ли первый символ строки заглавной буквой J:
Код:
if (szError[0] == _TEXT('J')) {
    // первый символ - J
} else {
    // первый символ - не J
}
...
« Последнее редактирование: 20-12-2007 17:12 от Алексей1153++ » Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines