gpt4 book ai didi

c - 是否可以通过 SIGFPE FPE_INTOVF 在 C (POSIX/Linux) 中捕获整数溢出异常?

转载 作者:行者123 更新时间:2023-12-04 12:27:24 27 4
gpt4 key购买 nike

我觉得这是一个愚蠢的问题,但我发现有关该主题的信息为零(不在此处也不在任何地方),因此问题如下:
上下文(您可能已经知道):SIGFPE异常(exception)和 si_code field
在 POSIX/Linux 中,我们有一种特殊的信号,称为 SIGFPE (尽管它的名字,它同时用于浮点和整数算术错误)。当我们为 SIGFPE 注册信号处理程序时使用 sigaction() ,我们的处理程序还会收到一个名为 si_code 的字段这解释了为什么特定的 SIGFPE已引发异常。一种可能的 si_code例如,值是 FPE_INTDIV ,你可以通过除以 int 来快速测试一下来自 0 .
问题:FPE_INTOVF 怎么样? ?
我的问题是关于一个特定的 si_code ,即 FPE_INTOVF .此代码描述为 Value signalling integer overflow in case of SIGFPE signal .
问题是我从来没有遇到过这个信号被引发的例子,也没有找到让操作系统引发这种信号的方法:当我在 C 中做整数溢出时,没有 SIGFPE抛出异常。但是FPE_INTOVF SIGFPE 的值是一种暗示,在整数溢出的情况下可能使主机抛出(就像整数除以零一样)。
问题:
FPE_INTOVF无法使用?它只是一种信号类型的占位符,没有符合 POSIX 的操作系统曾经实现过吗?或者是否可以指示操作系统在整数溢出的情况下抛出这种信号?
我真的很想抓 FPE_INTOVF来自 C 程序的信号,使用 sigaction() .

P.S.:我认识到无符号整数溢出在技术上不是 C 中的错误(它在 C 中根本不存在,因为所有无符号整数算术都具有“包装”行为),但是 签名 整数溢出确实是未定义的行为,所以我希望 FPE_INTOVF处理后者。

最佳答案

特尔;博士:SIGFPE FPE_INTOVF 类型的异常似乎只有在底层硬件支持它们时才会抛出。例如,在 Linux 上,这些是可能抛出 FPE_INTOVF 的拱门。 :alpha , ia64 , m68k , mips , parisc , s390 , 和 superh .
不是我的问题的答案,但值得注意的是:
我的问题是关于 FPE_INTOVF特别是,但如果您只是想检查整数溢出,那么值得注意的是,还有其他方法可以做到这一点:编译器特定的函数,如 __builtin_sadd_overflow() ( read more here ) 或编译器特定的标志,如 -ftrapv在海湾合作委员会。另见 thisthis关于 SO 的相关问题。
学分
感谢用户 KamilCuk , Steve SummitNate Eldredge感谢他们通过评论对这个答案做出的贡献。

P.S.: 以防其他人想添加关于 FPE_INTOVF 的其他信息,他们可能会发布此问题的另一个答案,或者他们可能会对此答案发表评论,我将编辑答案以添加其他信息。

关于c - 是否可以通过 SIGFPE FPE_INTOVF 在 C (POSIX/Linux) 中捕获整数溢出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69604998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com