簡體   English   中英

宏字符串:#define __T(x) x 是什么意思? 還有__T(#x)?

[英]Macro string: what does #define __T(x) x mean? And __T(#x)?

這是什么意思?

#define __T(x)  x

只返回x?

我看到的代碼使用了我以前從未見過的語法:

#define CREATE_ENCODER(CODEC) \
strcpy(codecName, __T(#CODEC); \
pCodec = new CODEC##VideoEncoder();
if(parFileName) \
{  pEncoderParams = new CODEC##EncoderParams; \
}

# 有什么用?

是的,該定義只是替換為傳遞的值。 如果您想在編譯時確定是否要通過翻譯函數 ( #define __T(x) translate(x) ) 或不( #define __T(x) x ) 傳遞值,則經常使用這種定義.

#字符串化傳遞的值: http : //gcc.gnu.org/onlinedocs/cpp/Stringizing.html
##是連接運算符: http : //gcc.gnu.org/onlinedocs/cpp/Concatenation.html

實際上 __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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM