- 论坛徽章:
- 0
|
我找到答案了,改成下面这样,用setjmp/longjmp来越过SIGFPE所在的地方,就可以了!
- #include <stdio.h>
- #include <signal.h>
- #include <setjmp.h>
- jmp_buf env;
- void handler (int signal) {
- printf("caught exception\n");
- longjmp(env, 2);
- }
- int main(int argc, char* argv[]) {
- {
- struct sigaction sa = {};
- sa.sa_handler = handler;
- //sigemptyset(&sa.sa_mask);
- //sa.sa_flags = 0;
- if(sigaction(SIGFPE, &sa, NULL) == -1) {
- perror("sigaction");
- }
- }
- if (0 == setjmp(env)) {
- int a = 3/(argc - 1);
- printf("a is %d\n", a);
- } else {
- /*exception*/
- printf("in exception\n");
- }
- return 1;
- }
复制代码 |
|