我有一个应用程序,其中的参数列表不能太长。我可以这样运行我的应用程序:
./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;
}

10-07 15:10