Передача функции с аргументами в обработчик сигнала? - PullRequest
0 голосов
/ 25 декабря 2018

Я могу успешно передать функцию в signal (), но не могу найти способ передать аргумент функции без использования static или глобальной переменной.functionontimer просто обновляет массив.

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

Есть ли способ передать указатель вместе с функцией без использования static или глобальной переменной?В идеале я хотел бы, чтобы functiontimer был определен примерно как functiontimer(int *data, index).

1 Ответ

0 голосов
/ 25 декабря 2018

Есть ли способ передать указатель вместе с функцией без использования static или глобальной переменной?В идеале я хотел бы видеть, что functiontimer определен примерно так: functiontimer(int *data, index)

Нет, это не так, и если вы включите функцию, которая ожидает дополнительный аргумент, такой как приведение его, как показано в вашемНапример, тогда неопределенное поведение возникает, когда система вызывает его с числом и типом аргументов, которые она ожидает использовать вместо количества и типа аргументов, которые функция фактически должна получить.

Неясно, для какой целиВы хотите предложенное поведение, но вполне возможно, что обработка сигнала не служит этой цели.Это, конечно, не служит цели, как вы надеетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...