【发布时间】:2016-06-04 12:20:57
【问题描述】:
我最近决定满足我长期以来的好奇心。 在 C 中除以零会发生什么? 我一直只是简单地用逻辑避免这种情况,但很好奇像 C 这样不能抛出可捕获异常的语言如何处理这种情况。
这是我非常简单的测试(在 Windows 10 上使用 GCC 编译):
int main()
{
double test1 = 1.0/0.0;
printf( "%f", test1 );
int test2 = 1/0;
printf( "%d", test2 );
}
使用double 类型完成的操作给了我一个可爱的小提示,表明结果不是数字:1.#INF00。到目前为止一切都很好..
但是,当使用int 类型执行除以零时,程序并没有雄辩地“停止工作”。我在 Windows 上运行它,所以我收到了那个可爱的对话框的提醒。
我对这种行为很好奇。 为什么将程序崩溃作为整数除以零的选择解决方案?真的没有其他解决方案,比如double 方式来处理除零吗?这是每个编译器的相同行为,还是只是 GCC?
【问题讨论】:
-
我会向你推荐这个答案stackoverflow.com/questions/3004095/… 不幸的是我想说这基本上是重复的......
-
GCC OSX 10.7.5:警告
main.c:6: warning: division by zero打印输出inf0CLANG OSX 10.7.5:main.c:6:18: warning: division by zero is undefined [-Wdivision-by-zero] int test2 = 1/0;打印输出inf0 -
我不明白反对意见。
-
我也不知道!我标记为重复,请原谅!
-
我没有投反对票,但我对此表示同情。在问这里之前你至少环顾了一下?