2012-11-07 15 views
14

Vấn đề của tôi là như sau:C Preprocessor Literal Xây dựng

Tôi có một chuỗi chữ đó là vĩ mô-ed như vậy

#define TITLE "Title" 

Nhưng có những trường hợp khi tôi cần phải vượt qua trong một char biến rộng của chuỗi này. Tôi muốn có thể vượt qua L"Title" cho các chức năng đó. Vì vậy, một cách tự nhiên, tôi đã cố gắng xác định macro mới W_TITLE theo điều khoản của TITLE.

Nhưng tôi không có may mắn, tất cả các cách tiếp cận của tôi (được liệt kê dưới đây) đều không thành công. Hãy cho tôi biết làm thế nào ma thuật như vậy có thể được thực hiện.

tôi đã cố gắng

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

Nhưng tất cả họ đều thất bại ...

+0

Bạn có thể muốn đọc ở đây: http://gcc.gnu.org/onlinedocs/cpp/Stringification.html – alk

Trả lời

11

Hãy thử điều này:

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

Bạn cần phải buộc một mở rộng thông qua một trung gian vĩ mô để có được những gì bạn đang tìm kiếm.

#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; 
} 

Kết quả:

Title 
Title 
+2

'cout <<' ... đó là một số mã tìm kiếm kỳ lạ .... – Mike

+4

@Mike lol. sry. không đủ cà phê sáng nay. – WhozCraig

+0

@WhozCraig Brilliant! Cảm ơn nhiều! – StoryTeller