2012-11-07 53 views
14

我的問題是:C預處理字面解釋

我有一個字符串字面量是宏觀ED像這樣

#define TITLE "Title" 

但也有這樣的情況,我需要在一個寬字符變種通過這個字符串。我希望能夠通過L"Title"這些功能。所以很自然地,我着手試圖根據TITLE來定義新的宏W_TITLE

但是我沒有運氣,我所有的方法(列表如下)都失敗了。請告訴我如何實現這樣的魔法。

我試圖

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

但他們都失敗...

+0

你可能想在這裏讀到:http://gcc.gnu.org/onlinedocs/cpp/Stringification.html – alk

回答

11

試試這個:

#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 
+2

'COUT <<'...這是一些奇怪的看C代碼.... – Mike

+4

@Mike大聲笑。 SRY。今天早上沒有足夠的咖啡。 – WhozCraig

+0

@WhozCraig精彩!謝謝一堆! – StoryTeller