Может ли компилятор или препроцессор C ++ преобразовать символ в верхний регистр?

Я пытаюсь использовать DRY методологии на произвольном наборе слов в смешанном регистре, так что текст MixedCase может произвести как:

  • Строка времени компиляции "MixedCase"
  • Переменная времени компиляции const int MIXEDCASE_ID

Я использую GCC, и расширения GCC будет приемлемым.

Возможно ли для C ++ преобразовать тест в коде в верхний регистр? Например, такой, что

  CONVERT (ABC)

будет производить символ ABC? Если нет, есть ли решение, кроме того, чтобы вводить каждый пример дважды в коде?

Редактировать: Учтите, что нет ограничений на формат ввода. Mixed или же "Mixed" или же 'M', 'i', 'x', 'e', 'd' или же 0x4d 0x69 0x78 0x65 0x64 (Гадость?) …

3

Решение

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

4

Другие решения

Посмотрите на m4 препроцессор. Это может сделать это и многое другое.

1

Хорошо используя хаос пп Библиотека (которая работает для препроцессоров C89 и C99) вы можете сделать это:

CHAOS_PP_CONCAT
(
(CHAOS_PP_STRING) CHAOS_PP_STRING_TO_UPPER(M i x e d C a s e)
)
// Expands to MIXEDCASE

Допустимыми значениями для символов являются цифры (от 0 до 9), буквенные символы в базовом наборе исходных символов (от a до z и от A до Z) и подчеркивание (_). Вот пример использования других символов:

CHAOS_PP_CONCAT
(
(CHAOS_PP_STRING) CHAOS_PP_STRING_TO_UPPER(a b C _ 1 0)
)
// Expands to ABC_10

В нем также есть макросы для преобразования токена.

1

Ты можешь проверить руководство сам. Если вы не можете найти там что-нибудь, что делает то, что вы хотите, вы всегда можете создать свой собственный препроцессор (который может равняться однострочности Perl в вашем Makefile, например).

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector