除以零后没有运行时错误

Moh*_*awy 1 c++ runtime-error visual-studio-2010 visual-c++ runtimeexception

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

#include <cstdio>

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

   while (1) {
      std::printf("RUNNING!!\n");
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Lig*_*ica 6

相反,为什么你认为应该有运行时错误?没有规定要求这样做.

除以零是不明确的.在这种情况下似乎,因为它可以在编译时捕获,您的编译器只是忽略操作...很可能是因为您从未使用过它的"结果".

所以,这个程序运行并可能没有输出:

int main()
{
    int x = 0;
    1/x;
}
Run Code Online (Sandbox Code Playgroud)

虽然我可以期望这个程序导致系统级算术异常:

#include <iostream>

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

    std::cout << y << '\n';
}
Run Code Online (Sandbox Code Playgroud)

通常,当您有未定义的行为时,不要指望任何事情.不要指望你的程序"工作",不要指望它产生有意义的输出,不要指望它不打电话给你的前妻并取消你的宠物鸡的合法监护权,并且不要指望它会造成你想要的错误.