谁能告诉我_T()是什么作用?

解决方案 »

  1.   

    为了维护既能按ASCII编译又能按Unicode编译的单一原始码档案,一个办法是使用Microsoft Visual C++包含的TCHAR.H表头档案。该表头档案不是ANSI C标准的一部分,因此那里定义的每个函式和巨集定义的前面都有一条底线。TCHAR.H为需要字串参数的标准执行时期程式库函式提供了一系列的替代名称(例如,_tprintf和_tcslen)。.H还用一个新的资料型态TCHAR来解决两种字元资料型态的问题。如果定义了 _UNICODE识别字,那么TCHAR就是wchar_t:
    typedef wchar_t TCHAR ;//(16位的UNICODE 字符)
    否则,TCHAR就是char:
    typedef char TCHAR ;//8位的ANSI字符
    如果定义了_UNICODE识别字,那么一个称作__T的巨集就定义如下:#define __T(x) L##x
    //如wchar_t * p = L"Hello!" 
    注意紧接在第一个引号前面的大写字母L(代表「long」)。这将告诉编译器该字串按宽字元保存-即每个字元占用2个位元组。
    如果没有定义_UNICODE识别字,则__T巨集只简单地定义如下:#define __T(x) x
    此外,还有两个巨集与__T定义相同:
    #define _T(x) __T(x)
    #define _TEXT(x) __T(x)
    WINNT.H表头档案进而定义了可用做8位元字串指标的六种资料型态和四个可用做const 8位元字串指标的资料型态。这里精选了表头档案中一些实用的说明资料型态语句:typedef CHAR * PCHAR, * LPCH, * PCH, * NPSTR, * LPSTR, * PSTR ;
    typedef CONST CHAR * LPCCH, * PCCH, * LPCSTR, * PCSTR ;
    字首N和L表示「near」和「long」,指的是16位元Windows中两种大小不同的指标。在Win32中near和long指标没有区别。类似地,WINNT.H定义了六种可作为16位元字串指标的资料型态和四种可作为const 16位元字串指标的资料型态:typedef WCHAR * PWCHAR, * LPWCH, * PWCH, * NWPSTR, * LPWSTR, * PWSTR ;
    typedef CONST WCHAR * LPCWCH, * PCWCH, * LPCWSTR, * PCWSTR ;
      

  2.   

    #ifdef _UNICODE
        #define _T(s)    L##s   // L"string" 代表 unicode 字符串,## 是连接符
    #else
        #define _T(s)    s
    #endif