c++ - 除以零后无运行时错误

标签 c++ visual-studio-2010 visual-c++ runtime-error runtimeexception

我正在使用 Microsoft Visual C++ 2010 如您所见,我有以下代码,其中我将 1 除以零

#include <cstdio>

int main()
{   
   int x;
   x = 0;
   1/x;

   while (1) {
      std::printf("RUNNING!!\n");
   }
}

令人惊讶的是,我没有发现任何运行时错误,程序继续执行并显示 RUNNING!!

所以我的问题是为什么“1/x”不被视为运行时错误,为什么程序不停止?

最佳答案

相反,为什么您认为应该是运行时错误?没有规定强制执行此操作。

除以零是未定义。在这种情况下,似乎因为它可能在编译时被捕获,所以您的编译器只是简单地忽略了该操作……很可能是因为您从未使用过它的“结果”。

因此,该程序运行并可能不输出任何内容:

int main()
{
    int x = 0;
    1/x;
}

虽然我预计这个程序会导致系统级算术异常:

#include <iostream>

int main()
{
    int x = 0;
    int y = 1/x;

    std::cout << y << '\n';
}

一般来说,当您有未定义的行为时,不要期待任何事情。不要指望你的程序能“工作”,不要指望它产生有意义的输出,不要指望它不会给你的前妻打电话并取消对你的宠物鸡的合法监护权,也不要指望它会导致你想要的错误。

关于c++ - 除以零后无运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29376100/

相关文章:

c# - c#中发生catch错误时如何跳过下一行的执行?

c++ - 分区和mbr恢复

visual-studio-2010 - Autoit 不生成从列表中选择项目后调用的事件

c++ - bool 数组的最小尺寸实现

wpf - 在 WPF 应用程序中调试 Silverlight

c++ - 这段代码在使用负数时提示错误怎么办?

unix - 经验丰富的 Unix 程序员使用 Microsoft 工具应该注意什么?

c++ - 在 C++ 中创建字符串时出错

c++ - 面试题?

c++ - 显示多个壳对象的属性表