Инструменты для расширения или встраивания подфункций в C-код
Предыстория: Часто мне приходится иметь дело с исходным кодом C без какой-либо документации во время разработки / обслуживания прошивки. Когда код имеет дело с большими структурами данных, где инициализация членов данных разбросана повсюду, становится очень сложно переключаться между различными исходными и заголовочными файлами, и часто я теряюсь.
Поэтому мое текущее решение - потратить несколько дней, чтобы "сгладить" код. Я не знаю, какой термин подходит, но в основном я занимаюсь расширением подфункций и заменой имен переменных входных параметров фактическими именами переменных, которые передаются в подфункцию. (Пожалуйста, посмотрите упрощенный пример ниже)
Результат этого упражнения очень полезен, но это очень ручной и утомительный процесс. Поскольку я делаю прошивку, на некоторых микросхемах, которые поддерживают возможность трассировки, это можно сделать с помощью отладчика JTAG. Но эта настройка не всегда доступна.
Я знаю, что с макросами я могу использовать для этого препроцессор, но я не мог понять, как это сделать с подфункциями, если такой инструмент существует. Я попробовал поискать "расширение подфункции" и т. Д., Но пока не повезло. Пожалуйста, дайте мне знать, если вы знаете, что такой инструмент существует или уместно использовать термин (-ы) того, что я пытаюсь сделать, чтобы я мог лучше найти его в Интернете. Большое спасибо!
int myGlobal;
void increment(int input)
{
input++;
}
void decrement(int input)
{
input--;
}
int doSomething(int input, int op)
{
if (op)
{
increment(input);
}
else
{
decrement(input);
}
}
int main(void)
{
int i, currMax;
int myOp = 1;
myGlobal = 0;
currMax = 5;
for (i = 0; i < currMax; i++)
{
doSomething(myGlobal, myOp);
}
currMax = 4;
myOp = 0;
for (i = 0; i < currMax; i++)
{
doSomething(myGlobal, myOp);
}
}
СТАНОВИТСЯ
int main(void)
{
int i, currMax;
int myOp = 1;
myGlobal = 0;
currMax = 5;
for (i = 0; i < currMax; i++)
{
// doSomething(myGlobal, myOp);
if (myOp)
{
// increment(myGlobal);
myGlobal++;
}
else
{
decrement(myGlobal);
myGlobal--;
}
}
currMax = 4;
myOp = 0;
for (i = 0; i < currMax; i++)
{
// doSomething(myGlobal, myOp);
if (myOp)
{
// increment(myGlobal);
myGlobal++;
}
else
{
// decrement(myGlobal);
myGlobal--;
}
}
}