Существует ли общий рефакторинг / преобразование для превращения макрокоманд C в функциональные эквиваленты? - PullRequest
0 голосов
/ 21 сентября 2019

Я воскрешаю старый старый проект , фактически первый браузер рефакторинга, который пересек рубикон Рефакторинг .

Источник полон макросов, макросов, которые яхотелось бы превратить в тестируемые и поддельные функции.

Мы установили, что, поскольку макросы семантически гораздо богаче, чем функции C, нет общего подхода для преобразования любого макроса в функцию,Но часто макросы представляют собой только прямой последовательный C-код, который по какой-то причине реализован в виде макроса.

В этом случае в основном необходимо преобразовать аргументы макроса в семантику аргумента функции.

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

Мои дела, как правило, выглядят примерно так* с типичным вызовом вроде

char *fn;
char *ccc;
char *ffin;
CharacterBuffer *iBuf;

GetChar(fn[i],ccc,ffin,iBuf);

(Да, я знаю, я нахожусь на спасательной миссии, верно ...)

Так что я ищу "механическое" преобразованиеправила для аргументов, которые, конечно, потребовали бы косвенности.

...