Я только начал работать над большой базой устаревшего кода. Он имеет множество переменных и структур, названных в текстовом виде «файлом определения». Затем некоторые файлы заголовков будут включать эти файлы определения и использовать препроцессор C для создания объявления переменной и метода получения/установки.
Это вызывает огромную боль при работе и изменении полей. Кроме того, сигнатуры геттера/сеттера не генерируются до момента компиляции, поэтому для них также нет поддержки intellisense.
Я думаю сгенерировать код перед компиляцией и попросить другие модули включить сгенерированные файлы заголовков, а не включать заголовок на основе препроцессора. Я изучил Python + clang и добавил ключевое слово в язык C. Но оба они ошеломляющие, и я не знаю, с чего начать. Поэтому я хотел бы спросить о том, как люди порекомендовали бы решить эту проблему.
редактировать: кодовая база не принадлежит мне, поэтому я не могу копировать и вставлять. Но я могу имитировать код, и это будет выглядеть так:
// in the definition file
NEWVARIABLE( point, int )
// in the preprocessor header file
#define NEWVARIABLE( name, type ) \
static type name;\
type LIBNAME_Get##name##(){return name ; }\
void LIBNAME_Set##name##( type _##name ){ name = _##name ; }
Иногда эти сгенерированные препроцессором функции или данные будут чередоваться с указателями функций, что сделает их еще более сумасшедшими.