将大量但已知数量的参数传递给C函数

将大量但已知数量的参数传递给C函数,c,embedded,code-generation,C,Embedded,Code Generation,我正在生成在嵌入系统上运行的C代码,并且我要生成的代码包含对具有大量参数的函数的调用。当我生成函数时,这些参数的数量总是已知的,它们总是由许多输入和输出数组组成 在我当前版本的代码中,我生成的C代码包含以下形式的函数: void f(const double* x0, const double* x1, const double* x2, double* r0, double* r1); 在本例中,我有3个输入数组和2个输出数组。但是,一般来说,输入和输出数组的数量可能非常大,如数百或数千。请

我正在生成在嵌入系统上运行的C代码,并且我要生成的代码包含对具有大量参数的函数的调用。当我生成函数时,这些参数的数量总是已知的,它们总是由许多输入和输出数组组成

在我当前版本的代码中,我生成的C代码包含以下形式的函数:

void f(const double* x0, const double* x1, const double* x2, double* r0, double* r1);
在本例中,我有3个输入数组和2个输出数组。但是,一般来说,输入和输出数组的数量可能非常大,如数百或数千。请注意,该代码不是供人类阅读的

现在,我了解到C标准。此外,我还希望生成的代码符合嵌入式系统的严格编码标准,并且我已经看到,它最多只允许6个参数

那么,如何以最有效的方式用最多6个函数参数重写上面的代码呢?注意,我只对执行速度感兴趣,而不是代码可读性

我的第一个想法是按如下方式处理上述函数:

void f(const double* x[], double* r[]);
然后按如下方式调用此代码(线程安全不是问题):


这是个好主意吗?还有其他更有效的选择吗?

我认为你做得很好。数组符合您的要求

比您的解决方案更有效的是能够通过单个指针访问所有参数,您可以使用结构访问所有参数,结构还可以处理不同类型的参数:

typedef struct
{
    const double* in[3];
    double* out[2];
} MyFuncArgs;

MyFuncArgs myFuncArgs = { { x0, x1, x2 }, { r0, r1 } };
void myFunc(MyFuncArgs*);
myFunc(&myFuncArgs); 
...
void myFunc(MyFuncArgs* args)
{
     // do stuff with args->in[...], put results in args->out[...].
}
或者:

typedef struct
{
    const double *in0, *in1, *in2;
    double *out0, *out1;
} MyFuncArgs;

MyFuncArgs myFuncArgs = { x0, x1, x2, r0, r1 };
void myFunc(MyFuncArgs*);
myFunc(&myFuncArgs); 
...
void myFunc(MyFuncArgs* args)
{
     // do stuff with args->in0 ..., put results in args->out0 ...
}

事实上,使用数组似乎是一个自然的答案。参数总是相同的,还是它们是在计算之前计算出来的?你可以使用指针的静态组吗?@jeb数组本身保存在静态内存中,但是(输入)数组的内容是在之前计算的。这是一个很好的建议,尤其是替代版本。我会接受这个答案。谢谢
typedef struct
{
    const double *in0, *in1, *in2;
    double *out0, *out1;
} MyFuncArgs;

MyFuncArgs myFuncArgs = { x0, x1, x2, r0, r1 };
void myFunc(MyFuncArgs*);
myFunc(&myFuncArgs); 
...
void myFunc(MyFuncArgs* args)
{
     // do stuff with args->in0 ..., put results in args->out0 ...
}