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에서 모두 작동합니다. 아니 맥에 - 우리 얻을 다음과 같은 오류 :
“error: pasting "REM_" and "L"qm"" does not give a valid preprocessing token”
맥 예 :
#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- wide-char-with-the-c-preprocessor)를 역순으로 사용합니다. –