Frage

Meine Frage ist im Zusammenhang mit der Code :: Blocks und seine gezwickt Version von MinGW und Notepad ++.

Ich möchte in der Lage sein, Unicode-Literale in meiner Quelle aufzunehmen, und ich kann, so lange, wie ich UTF-8 und nicht eine Stückliste verwendet werden.

Das funktioniert gut, bis zu einem Punkt, aber es Stücklisten aus (schlechtes Wortspiel), wenn ich die Datei öffnen; er (nicht überraschend) hat diesen un-nerving Nebeneffekt des Unicode in seiner ANSI Form anzeigt. :(

Die sehr nützlich und doch sehr ärgerlich drei Bytes haben, dort zu sein, und dann müssen sie gehen! (Zum Zeitpunkt der Kompilierung).

Es klingt einfach genug, vorverarbeiten nur die Quelldatei (en) und verwirft die ersten drei Bytes ...

(wenn sie ein UTF-8 BOM sind)

Ich werde sicher nicht der Prozessor sein (durch manuelle Entfernung) jedes Mal, wenn ich Kompilierung, so dass ich sogar mit BOM-less # include-Dateien für diese Literale zurückgegriffen habe, aber dies ist problematisch aus mehreren Perspektiven, nicht die am wenigsten davon ist, dass es ein Schmerz in der sprichwörtlich ist, und ich kann nicht „sehen“ sie! ..without viel Jonglieren.

Gibt es irgendeine Weise, die ich in die Werkzeugkette mit einem benutzerdefinierten Prä-Prozessor tippen kann? ... oder wenn ich einige offensichtliche Lösung verpasst haben, würde ich sehr viel über sie schätzen zu hören.

War es hilfreich?

Lösung 2

Ich habe ein bisschen mehr fossicked um, und ich habe eine vorläufige Lösung erarbeitet. Ich bin nicht ganz zufrieden damit, weil es sich um die Quelle zu modifizieren, während ich war eigentlich für eine verrohrt Lösung suchen, aber es scheint, dass g ++. Exe nur Befehlszeile args (bitte korrigieren Sie mich, wenn ich falsch liege) akzeptiert.

Meine „Lösung“ ist ein wenig rau-und-fertig, aber es funktioniert, und ist sicherlich besser (für mich) als jede andere tragfähige Lösung I über gekommen sind (das ist keine!) Es erfordert die gebührende Aufmerksamkeit zu zahlen zu Ihrem Redakteur „Datei extern geändert wurde“ Message-Box (wenn die Datei bearbeitet wird), aber in der Tat ist die BOM noch im Editor, so dass es so etwas wie ein strittigen Punkt ist.

Es ist ein einfaches Kommandozeilen Hack. Ich würde eine integrierte Option bevorzugen, aber hier ist das eine (und es funktioniert):

In Codeblöcken finden Sie unter: Einstellungen -> Compiler und Debugger -> Weitere Einstellungen ->    [Erweiterte Optionen] -> Kommandozeilen-Makro:

Nehmen Sie diese Mods auf der Kommandozeile. Sie sollten alle in einer einzigen Zeile sein (natürlich), aber für Klarheit Ich habe sie getrennt aus:

cmd /c DropTheBOM.exe $file
& $compiler $options $includes -c $file -o $object // (use your compiler cmdline)
& MakeTheBOM.exe $file
// Write your own utils, or try here: http://code.google.com/p/utf-bom-utils/

PS: # include-Dateien werden nicht von ihrer BOM stripiped (wenn sie eine haben) ..      Eine einfache BOM j / n arg Schalter für die Routine, die diese Dateien #include wäre ganz einfach dieses Problem lösen ... (aber es ist nur ein Windows-Problem ... vielleicht das ist, warum es nicht gesorgt worden ... oder hat es? Wer weiß?

Andere Tipps

Sie können alle Ihre Stringliterale in eine separate Datei trotzdem zu prüfen, Externalisierung und mit einer loadLit() Funktion (oder ähnliches) zur Laufzeit erhalten.

Auf diese Weise können Sie eine einzelne Datei haben (mit einer BOM) mit alle Ihre Stringliterale und wird Ihr Leben viel einfacher, wenn Sie jemals Ihre Anwendung internationalisieren haben.

Wir tun das mit unseren Sachen, aber halten unsere Klasse-1-Programme im Auge haben, indem sie es auf diese Weise i18n'ed für 21 verschiedene Schauplätze so sparen wir eine Menge Arbeit zu :-) Leistung kann variieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top