What are the various differences between the two symbols TCHAR
and _TCHAR
type defined in the Windows header tchar.h? Explain with examples. Briefly describe scenarios where you would use TCHAR as opposed to _TCHAR in your code. (10 marks)

- 57,975
- 43
- 146
- 217
-
3why does your question sound like a homework ? can't you take the time to rephrase your exam and make it sound more personnal ? – Adrien Plisson Jun 01 '10 at 10:26
-
7I actually took extra time and went out of my way to make it sound like homework. Tiring to see all these little idiosyncrasies in Windows headers with no rhyme or reason. – Agnel Kurian Jun 01 '10 at 10:27
-
1`tchar.h` is not part of the Windows SDK, but is part Microsoft CRT... – Adrien Plisson Jun 01 '10 at 10:30
2 Answers
In addition to what @RussC said, TCHAR
is used by the Win32 API and is based on the UNICODE
define, whereas _TCHAR
is used by the C runtime and is based on the _UNICODE
define instead. UNICODE
and _UNICODE
are usually defined/omitted together, making TCHAR
and _TCHAR
interchangable, but that is not a requirement. They are semantically separated for use by different frameworks.

- 555,201
- 31
- 458
- 770
Found your answer over here:
MSDN Forums >> Visual Studio Developer Center >> TCHAR vs _TCHAR
TCHAR and _TCHAR are identical, although since TCHAR doesn't have a leading underscore, Microsoft aren't allowed to reserved it as a keyword (imagine if you had a variable called TCHAR. Think what would happen). Hence TCHAR will not be #defined when Language Extensions are disabled (/Za).
TCHAR is defined in winnt.h (which you'll get when you #include ), and also tchar.h under /Ze. _TCHAR is available only in tchar.h (which also #defines _TSCHAR and _TUCHAR). Those are unsigned/signed variants of the normal TCHAR data type.

- 14,775
- 8
- 59
- 92

- 17,511
- 4
- 41
- 45