2014-11-04 12 views
5

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?

+0

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

+1

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

+0

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. –

cevap

1

Şu anda GCC'de bunu yapmanın bir yolu yoktur. Bilinen bir hata, bkz. GCC bug 64862

+1

Güncelleme için çok teşekkür ederim! Clang herhangi bir benzer bilgi belki? – toriningen

İlgili konular