Я пытаюсь использовать 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
(Гадость?) …
Для этого вам нужно написать инструмент для сборки, который предварительно обработал (на самом деле предварительно обработал) ваши исходные файлы, чтобы выполнить это преобразование. В gcc нет встроенной функции, которая могла бы делать это во время компиляции.
Посмотрите на m4
препроцессор. Это может сделать это и многое другое.
Хорошо используя хаос пп Библиотека (которая работает для препроцессоров 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
В нем также есть макросы для преобразования токена.
Ты можешь проверить руководство сам. Если вы не можете найти там что-нибудь, что делает то, что вы хотите, вы всегда можете создать свой собственный препроцессор (который может равняться однострочности Perl в вашем Makefile, например).