Her şey için ve her yerde UCS4'ü dahili Unicode gösterimi olarak kullanmak için char*
'u kullanarak bir uygulama yüklüyorum. C11'in char32_t
dizilerine genişleyen dizeleri tanımlamak için U"unicode literals"
'u kullanıyorum, bunlar esas olarak uint32_t
.'__attribute __ ((format (printf, x, y))) `C11 U" unicode editörleri "için nasıl kullanılır?
Sorun, printf
benzeri işlevlerin düzgün ek açıklamalarıyla ilgilidir. "Biçim" artık char*
olduğundan, derleyici daha fazla derlemeyi reddeder, ayrıca %s
biçimi için char *
yerine char32_t *
ile mutlu olmaz.
Stdlib *printf
ailesine bağımlı değilim, bu nedenle biçimlendirme yalnızca benim uygulama tarafından gerçekleştiriliyor.
Bu özniteliği tamamen devre dışı bırakmak dışında bunun için doğru çözüm nedir?
Bir yan soru: UTF-8 yerine UTF-32 kullanmaktan ne gibi faydalar elde etmeyi düşünüyorsunuz? Ve buna değeceğine gerçekten emin misin? (UTF-32'in çok kodlu glifleri de vardır.) – Deduplicator
Uygulamam yalnızca kod noktalarında çalışır, bu nedenle grafik kümelerini, kullanıcı tarafından algılanan karakterleri ve benzerlerini dikkate almam için hiçbir anlamı yoktur. UCS4, mevcut kod tabanının çoğunu yeniden kullanabildiğim için dize işlemeyi şimdiye kadar olduğu gibi basitleştirir ve bir sonraki yinelemede iç gösterimi UTF8'e taşıyacağım. – toriningen
Ayrıca, "U" noktasını özlemişim gibi gözüküyor. Özellikle, C11 karmaşık bir adım gibi görünüyor. Mbs olarak ihtiyacınız olan tüm Unicode kod noktalarını uygulamak için '\ u2002 '' notasyonu kullanabilirsiniz. Sorunun kendisi için, muhtemelen gcc insanlara doğrudan sormalısınız. Bu çok yaygın bir şey değil, bu yüzden soru konusunda uzmanlıklarına gerçekten ihtiyacınız var. –