Я написал некоторый код с использованием инструкций препроцессора, чтобы пропустить некоторые операторы, которые должны быть выполнены. Но мой C-код внутри main заинтересован в изменении ранее #defined значений и назначении новых значений в соответствии с условием, а также изменении результат предварительно обработанных операторов тоже во время выполнения. Короче говоря, я должен изменить предварительно обработанные операторы во время выполнения. Как я могу это сделать?Изменение предварительно обработанных значений во время компиляции
ответ
Короче я должен изменить предварительно обработанных заявлений во время выполнения
Это невозможно. Читайте перевод информации о 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.
Спасибо за умный ответ. Поэтому я должен дать ему попробовать по-другому. :-) –
Невозможно. Предварительная обработка происходит до компиляции.
Компилятор видит только результат препроцессора, не более того.
- 1. Изменение отображения сервлетов GWT во время компиляции
- 2. Изменение макроса строки во время компиляции
- 3. Проверка значений перечисления во время компиляции
- 4. Автоматизация значений переменных во время компиляции
- 5. RabbitMQ: обработка предварительно обработанных сообщений
- 6. Компиляция ранее предварительно обработанных изменений файла
- 7. Изменение значений на лету во время SqlAdapter.Fill()
- 8. Изменение API-интерфейсов во время выполнения или время компиляции?
- 9. Ошибки при отладке во время компиляции во время компиляции
- 10. Отказывание во время компиляции
- 11. offsetof во время компиляции
- 12. Ошибка во время компиляции?
- 13. Usecases генерации текста во время выполнения с использованием предварительно обработанных текстовых шаблонов T4
- 14. Как избежать траты времени во время компиляции во время разработки?
- 15. Создание предварительно обработанных файлов с помощью bcc32
- 16. Xamarin Studio и iOS: изменение Root.plist во время компиляции
- 17. Изменение исходного кода во время компиляции (с использованием LLVM)
- 18. Linux C: Изменение имени процесса во время компиляции
- 19. Изменение переменной среды Visual Studio 2008 во время компиляции
- 20. Есть ли способ иметь метаданные значений во время компиляции?
- 21. Установка значений во время компиляции в Visual Studio (C#)?
- 22. Ввод значений конфигурации во время компиляции в JavaScript
- 23. Строка назначения во время компиляции
- 24. Сгенерировать функции во время компиляции
- 25. NPE во время компиляции GWT
- 26. Тип специализации во время компиляции
- 27. Пропустить javadoc во время компиляции
- 28. Выберите функцию во время компиляции
- 29. Определить значения во время компиляции?
- 30. Определение наследования во время компиляции
Показать код. Ваш вопрос непонятен. Читайте о [C предварительной обработке] (https://en.wikipedia.org/wiki/C_preprocessor) и [cpp] (https://gcc.gnu.org/onlinedocs/cpp/). Вы, вероятно, не можете делать то, что хотите (потому что время * компиляции * время и * время запуска разные, и это может произойти на разных компьютерах с * кросс-компиляцией *). ** Усовершенствуйте свой вопрос ** (отредактировав его), скажите больше о своей ОС и системе –