我觉得这是一个愚蠢的问题,但我发现关于该主题的信息为零(不是这里也不是任何地方),所以这是问题:
上下文(您可能已经知道):SIGFPE
异常和si_code
字段
在 POSIX/Linux 中,我们有一种特殊的信号称为SIGFPE
(尽管它的名字,它同时用于浮点和整数算术错误)。SIGFPE
当我们为using注册一个信号处理程序时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
for 的值SIGFPE
是一种暗示,它可能会在整数溢出的情况下使主机抛出(就像它已经对整数除以零所做的那样)。
问题:
FPE_INTOVF
无法使用吗?它是否只是一种信号类型的占位符,没有符合 POSIX 的操作系统曾经实现过?或者是否可以指示操作系统在整数溢出的情况下抛出这种信号?
我真的对FPE_INTOVF
使用sigaction()
.
PS:我认识到无符号整数溢出在技术上不是 C 中的错误(它在 C 中根本不存在,因为所有无符号整数算术都有“包装”行为),但有符号整数溢出确实是未定义的行为,所以我希望处理FPE_INTOVF
后者。