24

I am trying to write cross platform i18n C++ code. Since most linux system prefer to use UTF-8 as the character encoding, I thought that I should use string on linux and wstring on Windows. Is tchar.h available on linux? What is an equivalent replacement on for tchar.h on Linux?

Paul Sonier
  • 38,903
  • 3
  • 77
  • 117
Sudarshan
  • 263
  • 1
  • 2
  • 6

2 Answers2

12

You may find this article to be useful. In particular, near the end they discuss a bit about using TCHAR and dealing with Windows code.

The article summarization is:

TCHAR will be translated into a wide character data type when compiling this code with the GNU C Compiler (most portable libraries define TCHAR in their headers and refer to wchar_t). This, in fact, was how I turned my C++ program into an anagram generator: I used standard C++ strings filled with UTF-8 and fed the data with pointers casted to wchar_t to library functions. UTF-8 data interpreted as UTF-32 equals garbage (but it is tremendously useful for obfuscation of data and bugs).

Yamur
  • 339
  • 6
  • 20
Paul Sonier
  • 38,903
  • 3
  • 77
  • 117
  • 4
    To be clear, tchar.h is Windows only. But it's fairly trivial to roll your own tchar.h. – Naaff May 21 '09 at 23:45
0

To build my Windows centric source I was able to use the tchar.h file from Cygwin's found in the cygwin\usr\include\w32api folder.

I am actually building using Android NDK. For my purposes I made a copy of tchar.h and patched it.

//#include <crtdefs.h>

#define _CRTIMP

//#define _strninc(_pc,_sz) (((_pc)+(_sz)))
//  _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);