2016-02-11 4 views
-1

Я написал некоторый код с использованием инструкций препроцессора, чтобы пропустить некоторые операторы, которые должны быть выполнены. Но мой C-код внутри main заинтересован в изменении ранее #defined значений и назначении новых значений в соответствии с условием, а также изменении результат предварительно обработанных операторов тоже во время выполнения. Короче говоря, я должен изменить предварительно обработанные операторы во время выполнения. Как я могу это сделать?Изменение предварительно обработанных значений во время компиляции

+1

Показать код. Ваш вопрос непонятен. Читайте о [C предварительной обработке] (https://en.wikipedia.org/wiki/C_preprocessor) и [cpp] (https://gcc.gnu.org/onlinedocs/cpp/). Вы, вероятно, не можете делать то, что хотите (потому что время * компиляции * время и * время запуска разные, и это может произойти на разных компьютерах с * кросс-компиляцией *). ** Усовершенствуйте свой вопрос ** (отредактировав его), скажите больше о своей ОС и системе –

ответ

2

Короче я должен изменить предварительно обработанных заявлений во время выполнения

Это невозможно. Читайте перевод информации о C preprocessing & cpp. Время компиляции и время выполнения разные (и скомпилированный код может работать даже на другой машине, читайте больше о cross-compiling). При использовании GCC используйте gcc -C -E foo.c > foo.i для предварительной обработки вашего foo.c исходного файл в foo.i препроцессоре вида (а затем использовать редактор или страницу, чтобы заглянуть внутрь этой генерируемой foo.i)

Может быть, вы хотите загрузить дополнительный код во время выполнения. Это невозможно при использовании чистого кода C99. Возможно, ваша операционная система предлагает dynamic loading. POSIX указывает dlopen. Вы также можете использовать методы JIT compiling для создания машинного кода во время выполнения, например. с библиотеками, как GCCJIT, asmjit, GNU lightning, libjit, LLVM, ...

Читайте также о homoiconic языках. Рассмотрим кодирование в Common Lisp (например, с помощью SBCL).

Возможно, вы хотите настроить компилятор GCC с помощью MELT.

+0

Спасибо за умный ответ. Поэтому я должен дать ему попробовать по-другому. :-) –

1

Невозможно. Предварительная обработка происходит до компиляции.

Компилятор видит только результат препроцессора, не более того.

Смежные вопросы