#c #cross-platform #c-preprocessor
#c #кроссплатформенный #c-препроцессор
Вопрос:
Существует ли кроссплатформенный (т.Е. Для Linux, BSD и OS X, в идеале для всех POSIX) Я могу получить программный доступ к константам, например O_RDWR
, на основе исключительно строки "O_RDWR"
? Я пишу некоторый (не-C) код, который взаимодействует с функциями C на разных платформах и должен вызывать, например, open(2) с правильными параметрами, но у меня нет гарантии, насколько локальная система устанавливает свои константы.
По сути, я ищу что-то вроде get_constant_value("O_RDWR") -> "02"
.
РЕДАКТИРОВАТЬ: в настоящее время у меня есть действительно неприятный хак: прямой вызов препроцессора и проверка выходных данных.
printf "#include <fcntl.h>nO_RDWR" | cpp | tail -n 1
Комментарии:
1. Обычно это делается путем компиляции некоторого кода C на каждой интересующей вас целевой платформе, который сопоставляет целочисленный литерал со строкой, а затем выполняет какой-то поиск. Например, в Python есть константы для них в
os
модуле , которые определяются черезposix
модуль вposixmodule.c
(посмотрите строку 8992).
Ответ №1:
Нет, на сегодняшний день такого понятия не существует. В C # это называется отражением. Ходят слухи, что комитет C обсуждает отражение для C 14. Как только он будет принят, ну, через 1-3 года, вы можете ожидать, что это будет поддерживаться в компиляторах.
Если количество необходимых вам констант ограничено, вы можете написать свой собственный код, который будет выполнять перевод.