4

これは何を意味するのでしょうか?

#define __T(x)  x

xを返すだけですか?

以前に見たことのない構文を使用しているコードが表示されます。

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

#は何のためですか?

4

2 に答える 2

11

実際、__ 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"); \

非ユニコードビルド、および

strcpy(codecName, L"CODEC"); \

UNICODEビルドで

非常に重要!!:_Tまたは__Tを使用するだけでは、コードがUNICODEに準拠していることを確認するのに十分ではありません。WINAPI関数の呼び出しが簡単になります。UNICODEで動作するようにコードを準備する必要があります。

于 2012-05-09T11:37:43.063 に答える
11

はい、その定義は単に渡された値に置き換えられます。#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

于 2012-05-09T11:22:34.573 に答える