首页 > 解决方案 > 为什么 SIGABRT_COMPAT 存在于 UCRT 中,它的预期用途是什么?

问题描述

在 UCRT signal.h 中,我看到了这些定义。

#define SIGABRT         22  // abnormal termination triggered by abort call

#define SIGABRT_COMPAT  6   // SIGABRT compatible with other platforms, same as SIGABRT

完整路径c:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\signal.h是否有帮助。

man signal.7我的 Ubuntu 18.04 系统上,我看到SIGABRT也映射到6.

这让我很困惑。由于 Windows 在底层并没有真正的“信号”,而且这都是在 C++11 标准库包装的Windows 原生的各种消息传递机制之上的一个仿真层,为什么他们选择了不可移植的东西为默认SIGABRT?他们是否希望人们将它用作参数raise(),或在信号处理程序中进行比较?

我能找到的关于存在的唯一文档SIGABRT_COMPAT是头文件中的注释,以及在线文档中的表格,它不比标题更具描述性。

该标准甚至没有定义它:https ://en.cppreference.com/w/cpp/header/csignal

我意识到这些都是象征性的价值,依赖于它们是特定的价值可能被认为是糟糕的形式(尽管它可能很有用),但这一定是有原因的。

看到这有点令人不安,因为它似乎是出于可移植性的原因,但同时使用它看起来会降低代码可移植性,因为它只在 UCRT 中定义。

标签: c++cvisual-c++msvcrt

解决方案


推荐阅读