这是什么意思?
#define __T(x) x
Run Code Online (Sandbox Code Playgroud)
刚回来x?
我看到代码使用我以前没见过的语法:
#define CREATE_ENCODER(CODEC) \
strcpy(codecName, __T(#CODEC); \
pCodec = new CODEC##VideoEncoder();
if(parFileName) \
{ pEncoderParams = new CODEC##EncoderParams; \
}
Run Code Online (Sandbox Code Playgroud)
#for是什么?
Thi*_*ter 10
是的,该定义只是替换为传递的值.如果您想在编译时确定是否要通过转换函数(#define __T(x) translate(x))或不通过()传递值,则通常会使用这种定义#define __T(x) x.
#字符串化传递的值:http://gcc.gnu.org/onlinedocs/cpp/Stringification.html并且
##是串联运算符:http://gcc.gnu.org/onlinedocs/cpp/Concatenation.html
实际上__T用于将字符串转换为wchar_t*或char*,在tchar.h中你有:
#define __T(x) L ## x
Run Code Online (Sandbox Code Playgroud)
在启用UNICODE时使用
#define __T(x) x
Run Code Online (Sandbox Code Playgroud)
当它被禁用时
如果要在UNICODE和非UNICODE编译上编译代码,请使用:
TCHAR*sz = __T("我的文字");
大多数WINAPI函数使用TCHAR*或其某些形式
实际上我更喜欢_T()版本,从来不知道__T版本存在,在tchar.h的底部你定义了它:
#define _T(x) __T(x)
#define _TEXT(x) __T(x)
Run Code Online (Sandbox Code Playgroud)
回到你的例子:
strcpy(codecName, __T(#CODEC)); \
Run Code Online (Sandbox Code Playgroud)
相当于:
strcpy(codecName, "CODEC"); \
Run Code Online (Sandbox Code Playgroud)
在非unicode构建,和
strcpy(codecName, L"CODEC"); \
Run Code Online (Sandbox Code Playgroud)
关于UNICODE构建
非常重要!!:使用_T或__T并不足以确保您的代码是UNICODE编译器.它将使调用WINAPI函数变得更容易.您必须准备好代码才能使用UNICODE.
| 归档时间: |
|
| 查看次数: |
8654 次 |
| 最近记录: |