Здравствуйте, Аноним, Вы писали:
Поясню на примере/ Есть функция установления имени чего-то.
void Something::setName(const char* newName);//лучше string, но сути не меняет;
В один прекрассный момент решают, что char-а будет недостаточно для всех возможных имён. В начальный момент это могли быть только символы латинского алфавита, потом добавили подчёркивания, цифры, некоторые знаки. А теперь надо добавить ещё и поддержку парочки китайских иероглифов. Т.е. нужна функция
void Something::setName(const wchar_t* newName);
И везде придётся в лучшем случае менять char на wchar (ещё придётся проверять, что никакой код не считает, что newName состоит из char-ов, например использование 1 вместо sizeof).
Если сразу использовать TCHAR, то изменение далосьбы намного легче.
А часто сразу известно, что код должен компилироваться под разные требования — с использованием юникода и без.