Необходимо разделить (во взглядах) значение выборов и представление того значения.
Выбор точка в логике JavaScript, где они должны перейти от строковых сигнальных меток до собственного типа и сделать сравнение там, предпочтительно где это только сделано однажды для каждого значения, которое должно быть преобразовано. Не забудьте обращаться к тому, какие потребности произойти, если строковая сигнальная метка каждый не сценарий, знает (т.е. действительно ли Вы принимаете значение по умолчанию к истинному или ко лжи?)
, Другими словами, да, необходимо зависеть от значения строки.:-)
Препроцессор C / C ++ действует в единицах токенов, а строковый литерал представляет собой одиночный токен. Таким образом, вы не можете вмешиваться в середину строкового литерала, подобного этому.
Однако вы можете предварительно обработать script.py во что-то вроде:
"some code\n"
"some more code that will be appended\n"
и #include это. Или вы можете использовать xxd
-i
, чтобы сгенерировать статический массив C, готовый к включению.
Лучший способ сделать что-то подобное - включить файл в качестве ресурса, если ваша среда / набор инструментов имеет такую возможность.
Если нет (например, встроенные системы и т. Д.), Вы можно использовать утилиту bin2c (что-то вроде http://stud3.tuwien.ac.at/~e0025274/bin2c/bin2c.c ). Он возьмет двоичное представление файла и выдаст исходный файл C, который включает в себя массив байтов, инициализированных этими данными. Вам может потребоваться некоторая настройка инструмента или выходного файла, если вы хотите, чтобы массив был завершен '\ 0'.
Включите запуск утилиты bin2c в свой make-файл (или в качестве шага перед сборкой того, что вы ' используется для управления вашими сборками). Затем просто скомпилируйте файл и свяжите его с вашим приложением, и ваша строка (или любое другое изображение файла) будет находиться в куске памяти, представленном массивом.
Если вы включаете текстовый файл как строку, одна вещь, о которой вы должны знать, это то, что окончания строк могут не соответствовать ожидаемым функциям - это может быть еще одна вещь, которую вы захотите добавить в утилиту bin2c, или вы захотите убедиться, что ваш код обрабатывает любые окончания строк, файл правильно. Возможно, измените утилиту bin2c так, чтобы в ней был переключатель «-s», который указывает, что вы хотите, чтобы текстовый файл был инкорпорирован как строка, чтобы окончание строки было нормализовано, а нулевой байт находился в конце массива.
одна вещь, о которой вы должны знать, это то, что окончания строк могут не соответствовать ожидаемым функциям - это может быть еще одна вещь, которую вы захотите добавить в утилиту bin2c, или вы захотите убедиться, что ваш код обрабатывает любые окончания строк, файл правильно. Возможно, измените утилиту bin2c так, чтобы в ней был переключатель «-s», который указывает, что вы хотите, чтобы текстовый файл был инкорпорирован как строка, чтобы окончание строки было нормализовано, а нулевой байт находился в конце массива. одна вещь, о которой вы должны знать, - это то, что окончания строк могут не соответствовать ожидаемым функциям - это может быть еще одна вещь, которую вы захотите добавить в утилиту bin2c, или вы захотите убедиться, что ваш код обрабатывает любые окончания строк, файл правильно. Возможно, измените утилиту bin2c так, чтобы в ней был переключатель «-s», который указывает, что вы хотите, чтобы текстовый файл был инкорпорирован в виде строки, чтобы окончание строки было нормализовано, а нулевой байт находился в конце массива.Вам нужно будет произвести некоторую собственную обработку кода Python, чтобы иметь дело с любыми двойными кавычками, обратными косыми чертами, триграфами и, возможно, другими вещами, которые в нем появляются. Вы можете в то же время превратить символы новой строки в \ n (или экранировать их с помощью обратной косой черты) и добавить двойные кавычки с обоих концов. Результатом будет файл заголовка, сгенерированный из исходного файла Python, который затем можно #include. Используйте процесс сборки для автоматизации этого, чтобы вы по-прежнему могли редактировать исходный код Python как Python.
Вы можете использовать Cog как часть процесса сборки (для выполнения предварительной обработки и встраивания кода). Я признаю, что результат, вероятно, не идеален, поскольку в конечном итоге вы видите код в обоих местах. Но всякий раз, когда я вижу «Python», «C ++» и «Препроцессор» в непосредственной близости, я чувствую, что это заслуживает упоминания.