我有这个简短的c程序,它会导致一个SIGPFE并尝试处理它:
#include <stdio.h>
#include <signal.h>
void catch_floating_point_error(int signal_number) {
printf("I caught a floating point error\n");
}
int main() {
signal(SIGFPE, catch_floating_point_error);
for (signed int i = -3; i<=3; i++) {
printf ("30 / %d = %d\n", i, 30/i);
}
}
当我编译并执行该程序时,它会打印
30 / -3 = -10
30 / -2 = -15
30 / -1 = -30
I caught a floating point error
I caught a floating point error
I caught a floating point error
...
直到我用ctrl-c终止进程。
我预计在执行信号处理程序catch_floating_point_error
之后导致FPE的指令之后执行一条指令会恢复程序。
显然情况并非如此。似乎该程序再次重新执行失败的指令。
那么,当我收到有SIGFPE的通知时,如何跳过失败的插入?