Ich portiere eine Anwendung von char*
für alles und überall zu verwenden UCS4 als seine interne Unicode-Darstellung. Ich benutze C11 U"unicode literals"
für die Definition von Strings, die zu Arrays von, die im Wesentlichen uint32_t
sind erweitern.Wie verwendet man `__attribute __ ((format (printf, x, y)))` für C11 U "Unicode-Literale"?
Problem ist mit richtig annotieren printf
ähnliche Funktionen. Als "Format" ist nicht mehr char*
, Compiler weigert sich, es weiter zu kompilieren, auch wird es nicht glücklich mit char32_t *
anstelle von char *
für %s
Format, nehme ich an.
Ich bin nicht auf stdlib Familie überhaupt, so dass die Formatierung ist nur durch meine Implementierung getan.
Was ist die richtige Lösung dafür, außer nur dieses Attribut insgesamt deaktivieren?
Eine Nebenfrage: Welchen Nutzen erhoffen Sie sich von der Verwendung von UTF-32 anstelle von UTF-8? Und bist du dir wirklich sicher, dass es das wert ist? (UTF-32 hat auch Multi-Codepunkt-Glyphen.) – Deduplicator
Meine Anwendung arbeitet ausschließlich mit Codepunkten, so dass es für mich keinen Sinn macht, Graphem-Cluster, vom Benutzer wahrgenommene Zeichen und ähnliches zu berücksichtigen. UCS4 vereinfacht die String-Verarbeitung im Moment sehr, da ich den größten Teil der vorhandenen Codebasis wiederverwenden kann, und ich werde die interne Repräsentation in der nächsten Iteration in UTF8 migrieren. – toriningen
Ich vermisse auch den Punkt von "U" ... "Zeug, scheint wie ein komplizierter Schritt, insbesondere da C11 fügt nur geringe Unterstützung, um diese zu behandeln. Sie könnten einfach die Schreibweise "" \ u2002 "verwenden, um alle Unicode-Codepunkte zu implementieren, die Sie als mbs benötigen. Für die Frage selbst sollten Sie die gcc-Leute wahrscheinlich direkt fragen. Das ist nichts sehr verbreitet, also brauchen Sie wirklich ihre Expertise in der Frage. –