c++ - 为什么我的 UnhandledExceptionFilter 没有被简单地除以零调用?

标签 c++ winapi exception visual-c++ unhandled-exception

我正在使用以下 MSVC++ 控制台应用程序代码(在 Windows 8.1、Release、Win32 上运行)尝试向我返回顶级异常:

#include "stdafx.h"
#include <Windows.h>
#include <iostream>

using namespace std; 

LONG WINAPI UnhandledExceptionFilter(PEXCEPTION_POINTERS exception)
{
    printf("Got an unhandled exception.");
    return EXCEPTION_CONTINUE_SEARCH;
}

int _tmain(int argc, _TCHAR* argv[])
{
    SetUnhandledExceptionFilter(UnhandledExceptionFilter);
    int a = 0;
    int b = 0;
    int c = a / b;
    cin.get();
    return 0;
}

我的 UnhandledExceptionFilter 实际上似乎从未在本示例中抛出的被零除异常上被调用,否则我希望显示“Got an unhandled exception”日志消息向上。这是为什么?

最佳答案

整数除以零是未定义的行为。如果一个实现选择为此(或任何其他未定义的行为)引发异常,那很好。如果实现选择 为某些未定义的行为引发异常,那也很好。当遇到未定义的行为时,无论实现做什么都可以。这不是他们的问题。

显然 MSVC++ 在 Windows 8.1 上运行,Win32 不会在被零除时引发异常。

你永远不应该期望未定义的行为会导致预期的结果。

关于c++ - 为什么我的 UnhandledExceptionFilter 没有被简单地除以零调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493078/

相关文章:

c++ - 由于为 C++ 程序调用 ulldiv.asm 而导致编译器引用错误

c++ - windows中控制台输出流的编码

c++ - std::vector.push_back() 抛出 badalloc 异常

exception - 封装和异常

c++ - String 类的隐式构造函数

c++ - 在没有智能指针的情况下返回指向堆对象的指针

c++ - 指定extern “C”时,为什么Visual Studio无法给出 undefined reference 错误?

c++ - 如何检索 SID 的字节数组

winapi - Windows 是否对可以安装的 USB 驱动器数量有物理限制?

java - JPA异常: Object: null is not a known entity type