tchar.h в Linux - PullRequest
       41

tchar.h в Linux

18 голосов
/ 22 мая 2009

Я пытаюсь написать кроссплатформенный код C18 на i18n. Поскольку большинство систем Linux предпочитают использовать UTF-8 в качестве кодировки символов, я подумал, что должен использовать string в Linux и wstring в Windows. Доступен ли tchar.h в Linux? Что такое эквивалентная замена для tchar.h в Linux?

Ответы [ 3 ]

12 голосов
/ 22 мая 2009

Вы можете найти эту статью полезной. В частности, ближе к концу они немного обсуждают использование TCHAR и работу с кодом Windows.

Резюме статьи:

TCHAR будет преобразован в тип широких символов при компиляции этого кода с помощью компилятора GNU C (большинство переносимых библиотек определяют TCHAR в своих заголовках и ссылаются на wchar_t). Фактически, именно так я и превратил свою программу на C ++ в генератор анаграмм: я использовал стандартные строки C ++, заполненные UTF-8, и передавал данные с указателями, приведенными к wchar_t, в библиотечные функции. Данные UTF-8, интерпретируемые как UTF-32, равны мусору (но они чрезвычайно полезны для запутывания данных и ошибок).

0 голосов
/ 29 марта 2017

Для создания моего Windows-ориентированного источника я смог использовать файл tchar.h из Cygwin, который находится в папке cygwin \ usr \ include \ w32api.

Я на самом деле строю с использованием Android NDK. Для моих целей я сделал копию tchar.h и исправил ее.

//#include <crtdefs.h>

#define _CRTIMP

//#define _strninc(_pc,_sz) (((_pc)+(_sz)))
//  _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);
0 голосов
/ 22 мая 2009

Это на самом деле не так просто. string.size () даст вам количество байтов UTF-8, а не символов Unicode. Честно говоря, wstring.size () не даст вам количество символов в присутствии суррогатов. Но на практике они не используются в обычных приложениях.

Таким образом, реальный ответ действительно зависит от того, зачем вам нужны строки Unicode. Это просто локализация интерфейса? У вас есть пользовательский ввод? Вам нужно проанализировать этот вход?

...