首页 > 解决方案 > 将带参数的函数传递给信号处理程序?

问题描述

我可以成功地将函数传递给 signal(),但我无法想出一种方法来将参数传递给函数而不使用static或全局变量。 functionontimer只是更新一个数组。

if (signal(SIGALRM, (void (*)(int)) functionontimer) == SIG_ERR) 
{
return(-1);
}

static有没有办法在不使用或全局变量的情况下将指针与函数一起传递?理想情况下,我会看到 functiontimer 被定义为functiontimer(int *data, index).

标签: cposix

解决方案


static无论如何都可以在不使用或全局变量的情况下将指针与函数一起传递?理想情况下,我会看到 functiontimer 被定义为functiontimer(int *data, index)

不,没有,并且如果您强制输入一个需要额外参数的函数,例如通过如您在示例中显示的那样强制转换它,那么当系统使用它期望的参数的数量和类型调用它时,会出现未定义的行为使用而不是函数实际定义要接收的参数的数量和类型。

目前尚不清楚您想要提议的行为的目的是什么,但很可能是信号处理不符合该目的。它当然不会以您希望的方式达到目的。


推荐阅读