gpt4 book ai didi

c - 指向 C 中函数的链表

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:55 25 4
gpt4 key购买 nike

我正在尝试创建一个链表来跟踪我想使用某些函数的顺序。我有大约 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/

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