c - 指向 C 中函数的链表

标签 c pointers linked-list

我正在尝试创建一个链表来跟踪我想使用某些函数的顺序。我有大约 20 个函数,它们都在我的代码的几个区域执行,但它们执行的顺序是动态的,所以我正在创建一个列表,我在其中插入哪个函数将在特定时间执行以清理将代码设置为只有一个区域用于所有 if 检查,另一个区域用于执行功能。这使它看起来高效且易于使用。 我遇到的问题是当我想传入变量时。看一下 C 中的伪代码...

    void func1() { ... }
    void func2() { ... }
    void func3(x,y) {...}
    void func4(z) {...}
    void func5() {...}

    // Do some If checks to determine order
    addFuncToList( func3 );
    addFuncToList( func5 );
    addFuncToList( func1 );

    while(condition) {
       x++;
       y--;

       execute_funcs( currentNode );
       currentNode = myList->next;
    }

    // Do some If checks to determine order
    addFuncToList( func1 );
    addFuncToList( func5 );
    addFuncToList( func2 );

    while(condition2) {
       execute_funcs( currentNode );
       currentNode = myList->next;
    }

    void execute_funcs( currentNode ) {
       if( currentNode == 1 ) func1();
       if( currentNode == 2 ) func2();
       if( currentNode == 3 ) func3();
       ...
    }

所以我喜欢这种方法,但我不想做一堆全局变量,我希望能够将变量传递到大多数这些函数中。大多数函数不需要传入变量,但有些函数需要传入不同的类型。有什么想法吗?

最佳答案

看起来您需要在向列表添加函数时创建“上下文”的概念。

因此你的函数原型(prototype)看起来像这样:

int func1(void* context);
...
int funcN(void* context);

并且该列表应包含函数地址及其上下文。在大多数情况下,context 将为 NULL,但当函数需要时,它可以是结构、数据数组等。只有调用者和特定函数知道 void* 的确切含义

关于c - 指向 C 中函数的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21148594/

相关文章:

c - 指针语法困惑

c - 结构体中的指针值发生变化而不重新分配

c - C中的链表实现(只打印最后两个节点)

c++ - 我如何使用 C++ 中的类创建和填充链表?

c++ - 进程终止,状态为-1073741510

c - 我该如何解决这个错误?警告 : implicit declaration of function ‘main_menu’

c++ - 是否存在针对 C/C++ 的 R 编译器?

c - 寻址非整数地址和 sse

c - 在方法头中后缀变量类型的星号有何意义?

c++ - 如何在 C++ 中删除动态分配的指向 int 指针的指针?