c++ - 宏字符串 : what does #define __T(x) x mean? 和 __T(#x)?

标签 c++ c visual-c++

这是什么意思?

#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/

相关文章:

c++ - 是否可以在派生类中选择性地定义类型

c - 线性搜索功能编译但没有输出

visual-c++ - 构建 OpenSSL 时为 "Compiling Desktop applications for the ARM platform is not supported"

java - 相当于C 中java 的scanner.nextline() 吗?

c - 指向结构内部结构的 void 指针

c++ - 在非成员函数中访问MFC对话框的成员变量

c++ - Visual C++ 2012 (x86) 中可能的编译器错误?

c++ - C++ 中图像序列的全局运动估计

c++ - 为什么我的模板参数包不起作用?

c++ - 如何正确释放二维数组 C++