Цель состоит в том, что при запуске программы функция будет читать файл конфигурации и устанавливать некоторые #defines. В других статьях этого проекта эти директивы препроцессора определяют , какой код выполнить, а что нет.
Как было сказано в другом ответе, это невозможно, так как препроцессорные директивы, такие как #define
, потребляются предварительными процессорами компиляторов. То, что на самом деле представляют исполняемые двоичные файлы, это скомпилированный измененный источник, который остается тем же, независимо от того, когда вы запускаете другой файл, который вы открываете. Более того, нет такой концепции, как загрузка файла конфигурации и изменение времени выполнения, поскольку C++ - это скомпилированный язык, а не интерпретируемый.
Что на самом деле это возможно, чтобы
- загрузить конфигурационный файл (желательно в формате стенд)
- PARSE его с общедоступными библиотеками для стандартного формата или написать свой собственный парсер.
- Используйте объекты STL, такие как карта, чтобы создать сопоставление между ключом конфигурации и значением
- Поместите STL в какое-то пространство имен, чтобы не загрязнять глобальное пространство имен и не превращать его в extern. Убедитесь, что декларация extern присутствует в файле заголовка, а переменная определена в файле .cpp, чтобы доступ к переменной мог быть получен из единицы перевода, отличной от той, где она была определена.
- Используйте распределенную конфигурацию в любом месте вашей программы.
#define предназначены для компиляции, а не для выполнения. –
... так что вместо этого вам нужны переменные и 'if()' – deviantfan