Недавно глянул в файл tchar.h и увидел объявленный тип TCHAR, который по сути дела делает тоже самое что и этот макрос:
#ifdef UNICODE
typedef wchar_t strt;
#elif
typedef char strt;
#endif
Теперь задаюсь вопросом, стоит ли использовать макрос, или же все таки готовым типом?
Если Вы работаете под Windows, а судя по упоминанию tchar.h это действительно так. И Ваше приложение должно поддерживать сборку как для широких wchar_t символов, так и для узких char, то использование типа TCHAR, единнственно правильное решение. Другое дело, что в современном мире потребности в этом возникать не должно и поддержка Unicode должна быть доступна номинально.
Что об этом пишет Microsoft:
Back when applications needed to support both Windows NT as well as Windows 95, Windows 98, and Windows Me, it was useful to compile the same code for either ANSI or Unicode strings, depending on the target platform. To this end, the Windows SDK provides macros that map strings to Unicode or ANSI, depending on the platform.
В 2017 году нет никакого смысла собирать программу без -DUNICODE.
Вместо TCHAR надо использовать wchar_t.
Как учит нас Страуструп, лучше пользоваться типом, чем макросом. Потому что макросы это зло типонебезопасное, а тип проверяется компилятором с учетом всех зависимостей для данной платформы. Включая участие в шаблонах и прочие чудеса науки.
UPD1:
не всегда есть возможность к примеру полностью переписывать класс для тестирования поведения в разных кодировках
Это не мое мнение, это я у Страуструпа вычитал (дай ему Бог здоровьичка) еще в одном из первых изданий по С++. Там было написано, что теперь отныне и вовеки макросы нужны только для предотвращения зацикливания хедеров. Что касается тестирования программы с разными типами данных, то нужно использовать typedef для быстрого переопределения типа. Но не макрос. То есть в своей программе пишете:
typedef char my_char;
и работаете с my_char. А когда надо работать с широким байтом, то переопределяете:
typedef wchar_t my_char;
и снова работаете с my_char.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости