I’m developing an app for Mac OS, which includes a cross-platform lib in C++. There’s a macro defined as follows:
#define MY_GET(DataType,DataName,PtrFunName,DefaultVaule) \
DataType Get##DataName() \
{ \
DataType dataTem = (DefaultVaule);\
if (NULL == p) \
{ \
return dataTem; \
} \
p->Get##PtrFunName(CComBSTR(L#DataName),&dataTem); \
return dataTem; \
}
When compiling, the compiler generates the following error:
Use of undeclared identifier 'L'
Which is expanded from macro ‘MY_GET’. After searching for CComBSTR(L, I can find other usage of L”String”. So why is the L expanded from my macro is undefined while other L are compiled successfully.
Is L”String” legal in Objective-C?
I seems that you need the preprocessor “token concatenation” operator
##here:instead of
The following code in an Objective-C file compiles and produces the
wchar_tstringL"abc":I don’t know if other compilers behave differently, but the Apple LLVM 4.1 compiler does not a allow a space between
Land the string: