例如:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int a = (int) strtol(argv[1], (char**) NULL, 10);
int b = (int) strtol(argv[2], (char**) NULL, 10);
printf("%d %% %d = %d\n", a, b, a % b);
return (0);
}
(该程序将这些值作为命令行参数,因为当进行硬编码时,我认为-2147483648 % -1
在编译时被0
替换了
使用-2147483648
和-1
作为第一个和第二个参数分别运行此简单程序会引发SIGFPE。
为什么会这样?还有其他特殊情况吗?我该如何避免呢?
谢谢!