Question

Ma question est dans le contexte du Code :: Blocks et sa version peaufinée de MinGW et Notepad ++.

Je veux être en mesure d'inclure littéraux Unicode dans ma source, et je peux, tant que je l'utilise UTF-8 et ne pas utiliser une nomenclature.

Cela fonctionne bien, jusqu'à un certain point, mais il BOMS out (mauvais jeu de mots) à chaque fois que je rouvre le dossier; il (sans surprise) a cette non-nerving effet secondaire de l'affichage de l'Unicode sous sa forme ANSI. :(

Les très utiles et pourtant très ennuyeux trois octets doivent être là, et ils doivent aller! (Au moment de la compilation).

Il semble assez facile, juste prétraiter le fichier source (s) et jeter les trois premiers octets (si elles sont une nomenclature UTF-8) ...

Je ne vais certainement pas être le processeur (par suppression manuelle) chaque compilation I de temps, donc j'ai même eu recours à l'utilisation des fichiers de nomenclature-moins #include pour ces littéraux, mais cela pose un problème de plusieurs points de vue, non le moindre est qu'il est une douleur dans le proverbe, et je ne peux pas « voir » les! ..without beaucoup de jonglage.

Est-il possible que je peux puiser dans le toolchain avec un préprocesseur personnalisé? ... ou si je l'ai manqué une solution évidente, je voudrais bien heureux d'entendre à ce sujet.

Était-ce utile?

La solution 2

J'ai fossicked autour d'un peu plus, et je l'ai élaboré une solution provisoire. Je ne suis pas entièrement satisfait parce qu'il implique de modifier la source, alors que je fait la recherche d'une solution courante, mais il semble que g ++. Exe accepte uniquement args la ligne de commande (s'il vous plaît me corriger si je me trompe).

Ma « solution » est un peu rugueux et prêt, mais cela fonctionne, et est certainement mieux (pour moi) que toute autre solution viable que je suis venu à travers (ce qui est pas!) Il faut porter une attention particulière à votre éditeur « de fichier a été modifié à l'extérieur » message boîte (si le fichier est en cours d'édition), mais en fait, la nomenclature est encore dans l'éditeur, il est donc un peu d'un point discutable.

Il est un hack simple ligne de commande. Je préfère une option plus intégrée, mais voici celui-ci (et il fonctionne):

Dans Codeblocks, allez à: Paramètres -> Compiler et Debugger -> Autres paramètres ->    [Options avancées] -> ligne de commande macro:

Assurez-vous ces mods à la ligne de commande. Ils devraient tous être sur une seule ligne (bien sûr), mais pour plus de clarté je les ai séparés sur:

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: Les fichiers #include ne sont pas stripiped de leur nomenclature (si elles ont un) ..      Une simple nomenclature y / n commutateur arg pour la routine qui #Includes ces fichiers résoudrait ce problème tout simplement ... (mais il est seulement un problème de Windows ... peut-être c'est pourquoi il n'a pas été pris en charge ... ou il a? quelqu'un sait-il?

Autres conseils

Vous voudrez peut-être envisager externalisant tous vos littéraux de chaîne dans un fichier séparé de toute façon et en utilisant une fonction de loadLit() (ou similaire) pour les obtenir lors de l'exécution.

Cela vous permettra d'avoir un seul fichier (avec une nomenclature) contenant tous vos chaînes littérales et vous rendra la vie beaucoup plus facile si jamais vous avez à internationaliser votre application.

Nous le faisons avec nos affaires, mais gardez à l'esprit notre classe 1 programmes doivent être i18n'ed pour 21 lieux différents de sorte que nous économisons beaucoup de travail en le faisant de cette façon :-) Votre kilométrage peut varier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top