如何使gcc ftrapv工作?
我将下面的代码编译为如何使gcc ftrapv工作?,c,gcc,C,Gcc,我将下面的代码编译为 $ gcc -Wall -ftrapv test.c 但是,运行生成的可执行文件总是打印-2147483648,这不是我所期望的。我正在运行gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5) 1#包括 2#包括 3#包括 4#包括 5. 6H(内部信号) 7 { 8 printf(“捕捉到的信号退出\n”); 9出口(1); 10 } 11 12内部干管(无效) 13 { 14 int x=int_MAX; 15年; 16 17信号(SIG
$ gcc -Wall -ftrapv test.c
但是,运行生成的可执行文件总是打印-2147483648,这不是我所期望的。我正在运行gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)
1#包括
2#包括
3#包括
4#包括
5.
6H(内部信号)
7 {
8 printf(“捕捉到的信号退出\n”);
9出口(1);
10 }
11
12内部干管(无效)
13 {
14 int x=int_MAX;
15年;
16
17信号(SIGABRT,h);
18y=x+1;
19 printf(“%d\n”,y);
20返回0;
21 }
后来添加:使用clang编译并将SIGABRT更改为SIGILL是可行的,但到目前为止gcc还没有成功。看起来gcc中的ftrapv支持有些中断,他们从2008年开始在Bugzilla中添加了一个,似乎是为了涵盖它。我的理解(但我现在在GCC文档中找不到引用,所以这是一条评论而不是答案)是,
-ftrapv
在GCC中不起作用,可能从来没有起过作用。你能将引用添加到bug中吗?谢谢。现在推荐的替代方案是-fsanize=undefined
(-fsanize=有符号整数溢出-例如,fsanize未定义错误陷阱
)。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <limits.h>
4 #include <signal.h>
5
6 void h(int signal)
7 {
8 printf("caught signal exiting\n");
9 exit(1);
10 }
11
12 int main(void)
13 {
14 int x = INT_MAX;
15 int y;
16
17 signal(SIGABRT,h);
18 y = x+1;
19 printf("%d\n",y);
20 return 0;
21 }