【发布时间】:2021-11-20 11:35:34
【问题描述】:
我的操作系统中有一个线程,它以固定的时间间隔被调用,然后按顺序执行 10-15 个不同函数的列表。每个函数都有一个返回参数,要么是 0(OK)要么不是 0(错误)。看起来像这样:
while (1) {
error &= function_1();
error &= function_2(some_parameter);
error &= function_3();
handleError(error);
}
但是,最好是当其中一个函数返回错误时,立即处理该错误并且不再执行其他函数(单个错误失败)。
对于两个函数,我可以在每个函数之前执行 if 条件,但对于 10-15,这会导致很多不必要的 ifs。
为此,我将使用按顺序遍历的函数指针数组:
int (*p_functions[3])() = { function_1, function_2, function_3 }
while (1) {
for (int i = 0; i < 3, i++) {
error = p_functions[i];
if (error) {
handle_error(error);
break;
}
}
}
我的问题是,正如您在第一个示例中看到的那样,我的 function_2() 有一个可能由另一个函数预先生成的参数。所以我无法处理具有不同参数的函数。
还有其他方法可以解决这个问题吗?或者也许有一些指针转换的技巧?我听说肮脏的铸造是一回事?
【问题讨论】:
-
不幸的是,如果你的函数有不同的参数,真的没有很好的方法来解决这个问题。
-
作为一种可能的解决方法,如果您不想自己编写代码或在需要时更新代码,可以使用其他工具、程序或脚本为您自动生成代码。
-
“会导致很多不必要的如果。”不...这将导致每个函数调用都需要一个必要的 if 语句。没问题。您可以将其隐藏在宏中,但这会更糟
-
鉴于 0 = OK 且非零返回值表示错误,我假设您打算使用
|=而不是&=,对吧? -
是的,很抱歉 :)
标签: c pointers function-pointers