这里有人(不是我)可能会想出一些预处理器魔术来满足您的要求,但这是我不会追求的解决方案。我认为这是一种糟糕的做法,因为宏很快就会变得毛茸茸的,很难调试。如果有意义的话,您的源代码中不能有“变量”。在构建过程中,首先运行的是预处理器,它解析所有宏。然后将源代码传递给编译器。编译器不会为你做任何文本替换,它会根据自己的源代码运行。要实现所需的功能,请编写一个对所需类型进行操作的函数,并使用所有类型调用该函数。我会改变你的
MovingAverage
功能如下:
void MovingAverage(float arr[80][2], const int T[80][2], int last_stat)
{
arr[last_stat][0] = ... // whatever calculation you want to do here
}
int main(void)
{
STATS stat_array;
int last_stat;
// .. initialize stat_array and last_stat
// now call MovingAverage with each of your 3 arrays
MovingAverage(stat_array.X, stat_array.T, last_stat);
MovingAverage(stat_array.Y, stat_array.T, last_stat);
MovingAverage(stat_array.Z, stat_array.T, last_stat);
...
return 0;
}