C/C++, может Вы #include файл в строковый литерал? [дубликат]

Необходимо разделить (во взглядах) значение выборов и представление того значения.

Выбор точка в логике JavaScript, где они должны перейти от строковых сигнальных меток до собственного типа и сделать сравнение там, предпочтительно где это только сделано однажды для каждого значения, которое должно быть преобразовано. Не забудьте обращаться к тому, какие потребности произойти, если строковая сигнальная метка каждый не сценарий, знает (т.е. действительно ли Вы принимаете значение по умолчанию к истинному или ко лжи?)

, Другими словами, да, необходимо зависеть от значения строки.:-)

41
задан Brian Tompsett - 汤莱恩 11 February 2016 в 20:41
поделиться

5 ответов

Препроцессор C / C ++ действует в единицах токенов, а строковый литерал представляет собой одиночный токен. Таким образом, вы не можете вмешиваться в середину строкового литерала, подобного этому.

Однако вы можете предварительно обработать script.py во что-то вроде:

"some code\n"
"some more code that will be appended\n"

и #include это. Или вы можете использовать xxd -i , чтобы сгенерировать статический массив C, готовый к включению.

36
ответ дан 27 November 2019 в 00:55
поделиться

Лучший способ сделать что-то подобное - включить файл в качестве ресурса, если ваша среда / набор инструментов имеет такую ​​возможность.

Если нет (например, встроенные системы и т. Д.), Вы можно использовать утилиту bin2c (что-то вроде http://stud3.tuwien.ac.at/~e0025274/bin2c/bin2c.c ). Он возьмет двоичное представление файла и выдаст исходный файл C, который включает в себя массив байтов, инициализированных этими данными. Вам может потребоваться некоторая настройка инструмента или выходного файла, если вы хотите, чтобы массив был завершен '\ 0'.

Включите запуск утилиты bin2c в свой make-файл (или в качестве шага перед сборкой того, что вы ' используется для управления вашими сборками). Затем просто скомпилируйте файл и свяжите его с вашим приложением, и ваша строка (или любое другое изображение файла) будет находиться в куске памяти, представленном массивом.

Если вы включаете текстовый файл как строку, одна вещь, о которой вы должны знать, это то, что окончания строк могут не соответствовать ожидаемым функциям - это может быть еще одна вещь, которую вы захотите добавить в утилиту bin2c, или вы захотите убедиться, что ваш код обрабатывает любые окончания строк, файл правильно. Возможно, измените утилиту bin2c так, чтобы в ней был переключатель «-s», который указывает, что вы хотите, чтобы текстовый файл был инкорпорирован как строка, чтобы окончание строки было нормализовано, а нулевой байт находился в конце массива.

одна вещь, о которой вы должны знать, это то, что окончания строк могут не соответствовать ожидаемым функциям - это может быть еще одна вещь, которую вы захотите добавить в утилиту bin2c, или вы захотите убедиться, что ваш код обрабатывает любые окончания строк, файл правильно. Возможно, измените утилиту bin2c так, чтобы в ней был переключатель «-s», который указывает, что вы хотите, чтобы текстовый файл был инкорпорирован как строка, чтобы окончание строки было нормализовано, а нулевой байт находился в конце массива.

одна вещь, о которой вы должны знать, - это то, что окончания строк могут не соответствовать ожидаемым функциям - это может быть еще одна вещь, которую вы захотите добавить в утилиту bin2c, или вы захотите убедиться, что ваш код обрабатывает любые окончания строк, файл правильно. Возможно, измените утилиту bin2c так, чтобы в ней был переключатель «-s», который указывает, что вы хотите, чтобы текстовый файл был инкорпорирован в виде строки, чтобы окончание строки было нормализовано, а нулевой байт находился в конце массива.

4
ответ дан 27 November 2019 в 00:55
поделиться

Вам нужно будет произвести некоторую собственную обработку кода Python, чтобы иметь дело с любыми двойными кавычками, обратными косыми чертами, триграфами и, возможно, другими вещами, которые в нем появляются. Вы можете в то же время превратить символы новой строки в \ n (или экранировать их с помощью обратной косой черты) и добавить двойные кавычки с обоих концов. Результатом будет файл заголовка, сгенерированный из исходного файла Python, который затем можно #include. Используйте процесс сборки для автоматизации этого, чтобы вы по-прежнему могли редактировать исходный код Python как Python.

1
ответ дан 27 November 2019 в 00:55
поделиться

Вы можете использовать Cog как часть процесса сборки (для выполнения предварительной обработки и встраивания кода). Я признаю, что результат, вероятно, не идеален, поскольку в конечном итоге вы видите код в обоих местах. Но всякий раз, когда я вижу «Python», «C ++» и «Препроцессор» в непосредственной близости, я чувствую, что это заслуживает упоминания.

1
ответ дан 27 November 2019 в 00:55
поделиться

Используйте fopen , getline и fclose .

-9
ответ дан 27 November 2019 в 00:55
поделиться