char*
을 사용하여 응용 프로그램을 내부 유니 코드 표현으로 UCS4를 사용하여 모든 곳에서 포팅하고 있습니다. C11의 U"unicode literals"
을 사용하여 char32_t
의 배열로 확장되는 문자열을 정의합니다.이 배열은 기본적으로 uint32_t
입니다.C11 U "유니 코드 리터럴"에`__attribute __ ((format (printf, x, y)))`를 올바르게 사용하는 방법?
printf
과 같은 기능에 올바르게 주석을다는 것이 문제입니다. "형식"은 더 이상 char*
이 아니기 때문에 컴파일러는 컴파일러를 더 이상 컴파일하지 않으므로 char *
대신 char32_t *
대신 %s
형식을 사용하면 만족스럽지 않을 것입니다.
나는 stdlib *printf
패밀리에 전혀 의존하지 않으므로 포맷은 순수하게 구현되어 수행됩니다.
이 속성을 완전히 비활성화하는 것 외에 올바른 해결책은 무엇입니까?
부작용 : UTF-8 대신 UTF-32를 사용하면 어떤 이점이 있다고 생각하십니까? 그만한 가치가 있다고 확신합니까? (UTF-32에는 다중 코드 점 글리프도 있습니다.) – Deduplicator
내 응용 프로그램은 코드 포인트에서만 작동하므로, 제자 클러스터, 사용자 인식 문자 등을 고려할 필요가 없습니다. UCS4는 현존하는 대부분의 코드베이스를 재사용 할 수 있기 때문에 문자열 처리를 대단히 단순화하고, 다음 반복에서 내부 표현을 UTF8로 마이그레이션 할 것입니다. – toriningen
나는 또한 'U'의 요점을 놓치고있는 것처럼 보입니다 ... "물건은 복잡한 단계처럼 보입니다. 특히 C11이 이들을 다루기 위해 약간의 지원 만 추가했기 때문에 그렇습니다. mbs로 필요한 모든 유니 코드 코드 포인트를 구현하기 위해''\ u2002 ''표기법을 사용할 수 있습니다. 질문 자체에 대해 gcc 사용자에게 직접 문의해야합니다. 이것은 흔한 일이 아니므로 질문에 대한 전문 지식이 필요합니다. –