带有L标识符的#define语法

IND*_*000 3 c c++ winapi widechar c-preprocessor

#define CONST_FILENAME "okay.dat"
LPCWSTR lpFilename=L CONST_FILENAME; //obviously doesn't work
Run Code Online (Sandbox Code Playgroud)

基本上,我如何得到相当于:

LPCWSTR lpFilename=L"okay.dat";
Run Code Online (Sandbox Code Playgroud)

#define

Moo*_*uck 5

#define GLUE(x,y) x##y
#define W(x) GLUE(L,x)

#define CONST_FILENAME "okay.dat"

int main() {
    const wchar_t* lpFilename = W(CONST_FILENAME);
    const wchar_t* lpFilename = W("okay.dat");
    wchar_t one_character = W('?');
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/2EzB6上的编译证明.这正是微软_T宏的工作方式,除了我无条件地定义它,所以你可以使用它来获得宽字符串,即使不在MSVC"Unicode"构建中.至于为什么需要GLUE宏,我从来没有听过对我有意义的解释,但如果没有它,宏将不会扩展,所以它是必需的.看起来这里有详细信息:##预处理器运算符的应用程序和陷阱需要考虑什么?