0
我們有一段使用寬字符串的跨平臺代碼。我們所有的字符串常量都是寬字符串,我們需要在其中的一些上使用CFSTR()。我們使用這些宏從寬字符串中刪除L:XCode:預處理器級聯破壞了嗎?
// strip leading L"..." from wide string macros
// expand macro, e.g. turn WIDE_STRING (#define WIDE_STRING L"...") into L"..."
# define WIDE2NARROW(WideMacro) REMOVE_L(WideMacro)
// L"..." -> REM_L"..."
# define REMOVE_L(WideString) REM_##WideString
// REM_L"..." -> "..."
# define REM_L
這適用於Windows和Linux。無法在Mac - 我們得到以下錯誤:
「error: pasting "REM_" and "L"qm"" does not give a valid preprocessing token」
的Mac例如:
#define TRANSLATIONS_DIR_BASE_NAME L"Translations"
#define TRANSLATIONS_FILE_NAME_EXTENSION L"qm"
CFURLRef appUrlRef = CFBundleCopyResourceURL(CFBundleGetMainBundle()
, macTranslationFileName
, CFSTR(WIDE2NARROW(TRANSLATIONS_FILE_NAME_EXTENSION))
, CFSTR(WIDE2NARROW(TRANSLATIONS_DIR_BASE_NAME))
);
任何想法?
該示例看起來並不完整,或者不清楚如何使用它。你能發表一段完整的代碼來觸發你描述的錯誤嗎? – Lindydancer
我添加了一些代碼,但不認爲它增加了很多。在Mac上使用WIDE2NARROW()會得到相同的錯誤信息。 –
@Lindydancer我需要的是[「如何使用C預處理器將連接字符串轉換爲寬字符?」](http://stackoverflow.com/questions/2192416/how-to-convert-concatenated-strings-to-寬字符與c預處理器)相反。 –