Вы не можете сделать это легко, но вы можете редактировать каждый исходный файл, чтобы изменить каждое вхождение ваших строк. Если вы используете emacs
в качестве своего редактора, вы можете закодировать код Emacs Lisp, чтобы автоматизировать это редактирование.
Конечно, вы можете сгенерировать свой код C из чего-то другого, например. используя некоторый другой препроцессор (gpp
, m4
) и некоторые (например, awk
) сценарий.
Вы можете подумать о принятии соглашения о том, что каждая такая строка используется в уникальном макросе, например. MY_STRANGE_STRING("abc")
вместо простого "abc"
; то вы могли бы использовать некоторые препроцессоры трюки macro -concatanation, __LINE__
, возможно, stringification- .... (возможно, с помощью gpp препроцессора, чтобы сгенерировать заголовок, и т.д ...)
возможность может быть, чтобы обработать Ваш источник дважды. Сначала с помощью некоторой предварительной обработки gpp
или m4
, которая преобразует MY_STRANGE_STRING("abc")
, происходящую в строке 123, в #define MY_STRING_CONSTANT_123 "cde"
в некотором сгенерированном заголовке. Тогда компилятор C использовал бы обычные препроцессорные трюки, чтобы получить это.
Вы также можете преобразовать предварительно обработанную форму своего исходного кода специальным инструментом или скриптом.
Если вы компилируете последние GCC (в частности), вы можете использовать MELT, чтобы настроить свой компилятор, чтобы делать такие трюки. Затем вы вставляете некоторые пропуски оптимизации для выполнения преобразования. Вы можете определить MY_STRANGE_STRING
в качестве вашего приложения __my_strange_string_builtin
и добавить, что дополнительные встроенные в GCC и т. Д.
Обратите внимание, что вы, вероятно, не хотите преобразовывать каждую литеральную строку (например, вы, вероятно, не хотите преобразовывать буквальная строка управления большинства fprintf
вызывает ... или расширение __FILE__
или __DATE__
, которое происходит в некоторых системных макросах, например assert
), но только некоторые из них.
Не могу больше помочь, так как вы не мотивируете свой вопрос.
Вы используете текстовый редактор, поместите курсор только за последний 'c', нажмите backspace 3 раза, а затем введите' bcd'. Серьезно, что вы имеете в виду «во время компиляции»? Вы не можете изменить свой источник во время компиляции. Вы можете генерировать исходный код, используя любой инструмент, который вы хотите, который записывает данные в файл * .c. –
Почему вы спрашиваете, что такое прецедент? Измените свой вопрос, чтобы улучшить его. –
Ваш вопрос действительно неясен.Пожалуйста, ** отредактируйте свой вопрос **, чтобы мотивировать его и дать реальный пример .... –