C代码中展开或内联子函数的工具

C代码中展开或内联子函数的工具,c,function,inline,expansion,C,Function,Inline,Expansion,背景: 在固件开发/维护期间,我经常不得不在没有任何文档的情况下处理C源代码。当代码处理数据成员分散在各地的大数据结构时,在不同的源文件和头文件之间切换变得非常困难,我经常会迷路 因此,我目前的解决方案是花几天时间“扁平化”代码。我不知道合适的术语是什么,但基本上我所做的是扩展子函数,用传递到子函数中的实际变量名替换输入参数变量名。(请参见下面一个过于简化的示例) 这个练习的结果非常有用,但这是一个非常手工和繁琐的过程。因为我正在做固件,在一些支持跟踪功能的芯片上,可以使用JTAG调试器来完成。

背景: 在固件开发/维护期间,我经常不得不在没有任何文档的情况下处理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-myGlobal;
无效增量(整数输入)
{
输入++;
}
无效减量(整数输入)
{
输入--;
}
整数剂量测量(整数输入,整数运算)
{
如果(op)
{
增量(输入);
}
其他的
{
减量(输入);
}
}
内部主(空)
{
int i,currMax;
int-myOp=1;
myGlobal=0;
currMax=5;
对于(i=0;i
变为

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--;
        }
    }

}
int main(无效)
{
int i,currMax;
int-myOp=1;
myGlobal=0;
currMax=5;
对于(i=0;i
如果你能编写几行PythonMorten代码,你可以用它来内联函数调用。詹森:谢谢。我不使用Python编写代码,但这可能是学习Python的一个很好的理由。下面有一个很好的例子,它解析C代码,并再次将其作为C输出。您可以从这里开始查看,然后将FuncCall.c内联到c使用c-generator模块将解析的语法树再次转换为c代码:您意识到,您可以通过不做任何事情来内联increment、decrement和doSomething函数,因为它们没有任何效果。