C代码中展开或内联子函数的工具
背景: 在固件开发/维护期间,我经常不得不在没有任何文档的情况下处理C源代码。当代码处理数据成员分散在各地的大数据结构时,在不同的源文件和头文件之间切换变得非常困难,我经常会迷路 因此,我目前的解决方案是花几天时间“扁平化”代码。我不知道合适的术语是什么,但基本上我所做的是扩展子函数,用传递到子函数中的实际变量名替换输入参数变量名。(请参见下面一个过于简化的示例) 这个练习的结果非常有用,但这是一个非常手工和繁琐的过程。因为我正在做固件,在一些支持跟踪功能的芯片上,可以使用JTAG调试器来完成。但这种设置并不总是可用的 我知道用宏我可以用预处理器来做这件事,但我不知道如何用子函数来做,如果有这样的工具的话。我试着在谷歌上搜索“子功能扩展”等等,但到目前为止运气不佳。请让我知道,如果你知道这样一个工具的存在或我正在尝试做的适当的术语,这样我可以在互联网上搜索它更好。非常感谢C代码中展开或内联子函数的工具,c,function,inline,expansion,C,Function,Inline,Expansion,背景: 在固件开发/维护期间,我经常不得不在没有任何文档的情况下处理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函数,因为它们没有任何效果。