2010-06-27 2 views
1

Мой вопрос относится к коду :: Блоки и его модифицированная версия MinGW и Notepad ++.Добавить специальный инструмент для инструментальной цепочки, чтобы удалить спецификацию UTF-8 перед компиляцией

Я хочу иметь возможность включать литералы Юникода в свой исходный код, и я могу, пока я использую UTF-8 и не использую спецификацию.

Это работает нормально, вплоть до точки, но он выдаёт (плохой каламбур) всякий раз, когда я снова открываю файл; он (неудивительно) имеет этот не нервный побочный эффект отображения Unicode в форме ANSI. :(

Эти очень полезный, но очень раздражает три байта должен быть там, а затем они должны пойти! (Во время компиляции).

Это звучит достаточно просто, предобработка исходного файла (ов) , и отбрасывать первые три байта (если они являются спецификацией UTF-8) ...

Я, конечно, не буду процессором (путем ручного удаления) при каждом компиляции, поэтому я даже прибегал к помощи для использования BOM-less #include файлов для этих литералов, но это проблематично с нескольких точек зрения, не в последнюю очередь из-за того, что это боль в пресловутой, и я не могу их «видеть»! жонглирования.

Есть ли способ, которым я могу использовать инструментальную цепочку с помощью специального препроцессора? ... или если я пропустил какое-то очевидное решение, я бы очень хотел услышать об этом.

ответ

0

Я немного искался, и я разработал предварительное решение. Я не совсем этому доволен, потому что это связано с изменением источника, в то время как я действительно искал решение с каналами, но похоже, что g ++. Exe принимает только аргументы командной строки (пожалуйста, исправьте меня, если я ошибаюсь).

Мое «решение» немного грубо и готово, но оно работает и, безусловно, лучше (для меня), чем любое другое жизнеспособное решение, с которым я столкнулся (это не так!). Это требует должного внимания (если файл редактируется), но на самом деле спецификация все еще находится в редакторе, поэтому это несколько спорный вопрос.

Это простая ручка командной строки. Я бы предпочел более интегрированный вариант, но вот этот (и он работает):

В Codeblocks перейдите к: Настройки -> Компилятор и отладчик -> Другие настройки -> [Дополнительные параметры] -> Маска командной строки:

Сделайте эти моды в командной строке. Они все должны быть на одной линии (конечно), но для ясности я отделено их:

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 файлы не stripiped их спецификации (если они есть) .. Простой BOM y/n arg switch для подпрограммы, в которой # включает эти файлы, решит эту проблему довольно просто ... (но это только проблема с Windows ... возможно, поэтому она не обслуживалась ... или имеет его? Кто-нибудь знает?

1

В любом случае вы можете рассмотреть возможность экстернализации всех ваших строковых литералов в отдельный файл и используя функцию loadLit() (или аналогичную), чтобы получить их во время выполнения.

Это позволит вам иметь один файл (с спецификацией), содержащий все ваши строковые литералы, и сделает вашу жизнь намного проще, если вам когда-либо понадобится интернационализировать ваше приложение.

Мы делаем это с нашими вещами, но имейте в виду, что наши программы класса 1 должны быть i18n'ed для 21 разных локаций, поэтому мы сохраняем много работы, делая это следующим образом :-) Ваш пробег может отличаться.