Все #define
теряются после предварительной обработки. Если вы хотите, чтобы информация о символах препроцессора была доступна во время выполнения, вы должны иметь имена (и, разумеется, значения) этих макросов в виде строк в вашем исполняемом ИЛИ в виде отдельного файла, который вы затем копируете во время выполнения. Я мог бы представить, что было бы неприятно иметь два списка флагов, один с символами # define, другой со строками, а затем вручную заботясь о том, что если вы обновите один, вы также обновите другой без ошибок.
Я бы пошел с отдельным файлом, который вы загружаете во время выполнения, но вместо проблем с обновлением просто укажите, что этот файл будет заголовочным файлом, который вы также #include
. В частности, я предлагаю: переместить все ваше определение флага #define's
в отдельный заголовочный файл, включить его в свои источники, чтобы вы могли использовать его так, как вы привыкли, создать чтение мини-парсера в файле при запуске. время, то есть разбор каждой строки #define asdf 0xF1A6
в строку и int. Если это работает на практике, и вы хотите предотвратить случайное изменение пользователем этого заголовочного файла, вы можете либо его хэшировать, либо закодировать в двоичном виде.
Альтернативой, с которой вы можете использовать #define
-символы в качестве строк на самом деле в вашем двоичном файле, было бы создание .rc
-файла из этого заголовочного файла (или как файла заголовка, так и .rc
из .csv
-файл), а затем с помощью компилятора ресурсов встроить его в секцию .rsrc
вашего бинарного файла, вы должны написать вспомогательную программу (которая преобразует файл) и интегрировать вызов этой программы-трансформера в ваш make-скрипт или система сборки всегда должны иметь .rc
последнюю версию.