2010-08-18 37 views
4
#define NAME(x) TEXT(x) 
#define TEXT(quote) __TEXT(quote) // r_winnt 
#define __TEXT(quote) quote   // r_winnt 

以上是来自winNT.h,不是NAME("Virtual Cam")"Virtual Cam"相同,使用这个宏有什么意义?这种类型的宏有什么意义?

回答

4

__TEXT根据是否定义UNICODE标志来选择宏扩展。如果不是,则只扩展到quote,否则将在报价中附加L,以便它变为L"Virtual Cam"。该字符串被解释为宽字符串。

+0

L'Virtual Cam“是C++的本地语法还是定义在某些头文件中? – user198729 2010-08-18 12:39:31

+0

我认为这是本机C++代码,因为可以写wchar_t * pwstr = L“Test”; – 2010-08-18 12:53:10

+1

C++ ISO标准将wchar_t视为C原生;-)。因此,L不是C++本机代码,而是C本机代码;-) – 2010-08-18 12:57:08

1

取决于您的系统是否被#defined使用Unicode。然后它会自动将文字更改为宽字面而不是字面值。

+2

但我没有看到上面的逻辑,它是如何发生的? – user198729 2010-08-18 12:15:04

+0

其中“使用Unicode”表示“使用UTF-16编码的Unicode”,因为这是Microsoft工具和API最好支持的Unicode编码。 – 2010-08-18 13:26:19