这是什么意思?
#define __T(x) x
只返回x?
我看到代码使用了我以前从未见过的语法:
#define CREATE_ENCODER(CODEC) \
strcpy(codecName, __T(#CODEC); \
pCodec = new CODEC##VideoEncoder();
if(parFileName) \
{ pEncoderParams = new CODEC##EncoderParams; \
}
# 是什么意思?
最佳答案
实际上__T是用来把字符串转成wchar_t*或char*的,在tchar.h中你有:
#define __T(x) L ## x
在启用 UNICODE 时使用,
#define __T(x) x
当它被禁用时
如果您的代码要在您使用的 UNICODE 和非 UNICODE 编译上编译:
TCHAR* sz = __T("我的文本");
大多数 WINAPI 函数使用 TCHAR* 或其某些形式
实际上我更喜欢 _T() 版本,从来不知道 __T 版本存在,在 tchar.h 的底部你已经定义了它:
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
回到你的例子:
strcpy(codecName, __T(#CODEC)); \
相当于:
strcpy(codecName, "CODEC"); \
在非 unicode 构建上,以及
strcpy(codecName, L"CODEC"); \
基于 UNICODE 构建
非常重要!!:使用 _T 或 __T 并不足以确保您的代码符合 UNICODE 标准。它将更容易调用 WINAPI 函数。您必须准备代码才能使用 UNICODE。
关于c++ - 宏字符串 : what does #define __T(x) x mean? 和 __T(#x)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10515073/