L是将ANSI转为UNICODE的吧,那么它与_T何区别?
另外,怎么找不到关于L的宏定义,如:
    #define L ......
编译器如何解释它?解释成什么了?
试写:
    int i = L"aaa";
根据错误提示,似乎L是unsigned short,可在头文件中找不到L的宏定义。
到底是个什么东东?请指教

解决方案 »

  1.   

    _T自动转换UNICODE和ANSI,根据你工程的设置
      

  2.   

    在Unicode环境下编译可以成功,比如
    BSTR i=L"aaa";
      

  3.   

    _T是一个宏,类似TEXT  假如你有#define UNICODE 
    那就会专成 wchar 否则就是char
      

  4.   

    L只是提醒编译器按Unicode编译而已,并没有宏。由编译器负责
      

  5.   

    rocky_2002(rocky_2002):
       那是不是不论是否define _UNICODE,见到L编译器就按Unicode编译吗(2000/NT下)?
      

  6.   

    rocky_2002(rocky_2002):
       那是不是不论是否define _UNICODE,见到L编译器就按Unicode编译吗(2000/NT下)?
      

  7.   

    在微软的丛书中有一部分是这么写的:
    按如下方式将字符串常量编码:
    "HELLO" 那么编译器将从ansi字符串中组成该字符串。
    如果是
    L"HELLO"
    那么编译器将使用Unicode编码。
    如果使用MFC的_T宏,就有
    如果定义了预处理符号_UNICODE,那么编译器将使用Unicode字符。
    如果没有定义的话,就使用ansi字符。
      

  8.   

    另外还有:
    将字符声明为TCHAR类型而不是char类型。如果定义了_UNICODE符号,TCHAR将求值为wchar_t,它是一个16位的Unicode字符。如果没有定义_UNICODE,TCHAR将变成古老的char。
    不要使用char * 或者 wchar_t * 来声明TCHAR字符串的指针,而应当使用TCHAR * 或者更好的LPTSTR(指向TCHAR字符串的指针)和LPCTSTR(指向 const TCHAR 字符串的指针)数据类型。
    不要认为一个字符串长度为8位,如果要将以字节表示的缓冲区的长度转变为以字符表示的缓冲区的大小,可以借助sizeof(TCHAR)来划分缓冲区的长度。
      

  9.   

    更正。
    是字符长度为8位。不是字符串。
    上面的内容可见于
    MFC Windows 
    程序设计(第二版)