Есть кодогенератор, который разбирает файл конфигурации вида
Параметр1 = 12;
Параметр2 = 422;
и формирует "компактное" представление в виде
const unsigned char settings[] = {
1,0, // 2 байта на код параметра
1, // длина значения
12, // значение
2,0,
2,
422&0xff,422>>8,
};
Однако значения параметров часто являются константами в программе. К примеру
enum {Const1 = 12, Const2 = 422};
и хотелось бы в файле конфигурации использовать именно имена констант.
Проблема в том, как кодогенератор узнает значения Const1 и Const2?
Пришла в голову мысль сгенерить и запустить программу вида
#include "..."
#include <iostream>
void main() {
std::cout << "Const1: " << Const1 << "\n";
// ...
}
однако у меня кросскомпиляция, поэтому не сработает.
Как вариант, можно скомпилировать такую программу
#include "..."
int64_t data[] = {0x456567768768, 0x7896542135,
Const1, Const2};
void main() {}
а потом в бинарнике найти маркеры и дальше вытащить значения. Однако как-то сильно сложно получается...
Нет ли какого-то более простого решения?
Еще была мысль генерить что-то типа UNPACK(Const1), но внутри макроса размер тоже неизвестен...
ЗЫ gcc
ЗЫЫ Конечно можно считать именованные константы 4-байтными и согласиться с потерей нескольких байт флэша на параметр
, но проснулся спортивный интерес