例如:
#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。为什么会这样?还有其他类似的特殊情况吗?我怎样才能避免它?
谢谢!