14

私の問題は次のとおりです。

私はそのようにマクロ化された文字列リテラルを持っています

#define TITLE "Title"

しかし、この文字列のワイド char バリアントを渡す必要がある場合があります。L"Title"それらの関数に渡せるようにしたいです。当然のことながら、新しいマクロW_TITLEを の観点から定義しようと試みましたTITLE

しかし、私には運がありません。私のすべてのアプローチ(以下にリストされています)は失敗しました。そのような魔法をどのように達成できるか教えてください。

私は試した

#define W_TITLE L##TITLE
#define W_TITLE #L TITLE
#define W_TITLE ##L TITLE

しかし、どれも失敗...

4

1 に答える 1

12

これを試して:

#define WIDEN_(exp)   L##exp
#define WIDEN(exp)    WIDEN_(exp)
#define TITLE         "Title"
#define W_TITLE       WIDEN(TITLE)

探しているものを取得するには、中間マクロを介して展開を強制する必要があります。

#include <stdio.h>

#define WIDEN_(exp)   L##exp
#define WIDEN(exp)    WIDEN_(exp)
#define TITLE         "Title"
#define W_TITLE       WIDEN(TITLE)

int main(int argc, char *argv[])
{
    printf("%s\n", TITLE);
    wprintf(L"%ls\n", W_TITLE);
    return 0;
}

結果:

Title
Title
于 2012-11-07T17:33:50.503 に答える