Tôi đang sử dụng tiền xử lý macro này để "stringify" và trở lại một cách dễ dàng từ một chức năng giải quyết các định nghĩa:stringify Macro với Unicode Chuỗi Literal
#define STRINGIFY_RETURN(x) case x: return #x ""
Nó hoạt động như một nét duyên dáng trong môi trường MBSC với xâu bình thường. Ví dụ:
#define MY_DEFINE_1 1
#define MY_DEFINE_2 2
#define MY_DEFINE_3 3
const char* GetMyDefineNameA(unsigned int value)
{
switch(value)
{
STRINGIFY_RETURN(MY_DEFINE_1);
STRINGIFY_RETURN(MY_DEFINE_2);
STRINGIFY_RETURN(MY_DEFINE_3);
default: return "Unknown";
}
}
Tuy nhiên tôi đã phải chuyển sang Unicode tương thích ngày càng nhiều và vì vậy tôi đã phải viết lại chức năng này để trả lại chuỗi Unicode đòi hỏi các prefixing với L
ở phía trước của xâu. Vì vậy, tôi đã cố gắng:
#define STRINGIFY_RETURN_WIDE(x) case x: return #x L""
const wchar_t* GetMyDefineNameW(unsigned int value)
{
switch(value)
{
STRINGIFY_RETURN_WIDE(MY_DEFINE_1);
STRINGIFY_RETURN_WIDE(MY_DEFINE_2);
STRINGIFY_RETURN_WIDE(MY_DEFINE_3);
default: return L"Unknown";
}
}
Nhưng điều đó mang lại cho tôi những lỗi:
lỗi C2308: concatenating dây không phù hợp
lỗi C2440: 'return': không thể chuyển đổi từ 'const char [12] 'thành' wchar_t * const
tôi cũng đã cố gắng:
#define STRINGIFY_RETURN_WIDE(x) case x: return L #x ""
#define STRINGIFY_RETURN_WIDE(x) case x: return #x "" L
nhưng không có vấn đề gì, tôi không thể làm cho nó hoạt động. Tôi không biết gì về điều này và dường như không tìm được giải pháp.
Tôi thực sự biết ơn nếu ai đó có thể hiển thị đúng cách để thực hiện macro này để giải quyết thành chuỗi Unicode.
Cập nhật:
#define STRINGIFY_RETURN_WIDE(x) case x: return L#x ""
không ném lỗi C2440, nhưng nó vẫn mang lại cho tôi những C2308.
Cập nhật 2:
Tôi đang sử dụng Microsoft Visual Studio 2013
Bạn nên in ra tệp đã được xử lý trước để xem chính xác trình biên dịch được tạo ra, và sau đó làm việc từ đó. – PaulMcKenzie
Bạn không chỉ muốn: #define STRINGIFY_RETURN_WIDE (x) case x: return L # x "" –
@TimBeaudet Tôi vừa thử, nó mang lại cho tôi C2308 nhưng lỗi C2440 đã biến mất:/ – Vinzenz