gpt4 book ai didi

c - 长参数列表,如何很好地处理它们,现在我有很多 if/else 语句……纯 C

转载 作者:太空宇宙 更新时间:2023-11-04 07:18:05 24 4
gpt4 key购买 nike

我有一个应用程序,其中参数列表不能太长。我可以这样运行我的应用程序:

./app -operations a b c d e f g h i j ...

等等。我的 a,b,c ... 是我想要运行的算法(在我的代码中定义的函数)。为了能够执行它们,我有这样的东西:

if(a)
funA();

if(b)
funB();

if(c)
funC();

...

它看起来不太好,是吗?我必须说,调用的次数远不止 26 次,因为我的应用程序越来越大,我的参数列表也越来越大。我正在寻找一种使它更简单/更漂亮的奇特方法。有可能吗,有想法的人吗?

我不想使用 C++ 或外部库来简化它。可以用纯 C 完成吗?

最佳答案

这是一个非常简化的可能选项:

    #include <stdio.h>

// create a common structure to hold all your
// function parameters;
typedef struct Parameters
{
int p1;
int p2;
} Param_Type;


// sample function 1
void func1( Param_Type *params ) {
printf("hi from func1: %d\n", params->p1 );
}

// sample function 2
void func2( Param_Type *params ) {
printf("hi from func2: %d\n", params->p2 );
}

int main() {


Parameters p;
// parse the command line and populate the parameters struct;
p.p1 = 1;
p.p2 = 1;

//create a lookup table with pointers to each function.
void (*F_A[2])(Param_Type *) = {func1, func2};

//You will still need some function, that given a set of arguments, can
// derive and return an index into the array that maps to the correct
/ function.

int func_idx = your_mapping_function(...) // todo

// dispatch the correct function call.

(*F_A[func_idx])(&p);


return 0;
}

关于c - 长参数列表,如何很好地处理它们,现在我有很多 if/else 语句……纯 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23048801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com