c++ - 为什么 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 中定义。
解决方案
推荐阅读
- r - 为现有列中的值向数据框中添加列
- nativescript - 如何处理 HtmlView-Component 中的链接
- python - 在使用 Python shell 时从 py 文件导入函数
- meteor - 如何在 Meteor 中包含 Materialise?
- django - 我可以在不更新 Django 模型的情况下更改数据库中的列类型吗?
- authorization - 微服务授权我应该使用什么方法?
- html - 嵌套的可排序元素卡住
- javascript - 包含每个 DIV 的 Javascript 搜索
- cmake - CLion:我如何获得实际库代码的覆盖率,而不仅仅是测试
- python - 如何使用 PyO3 从 Python 访问 Rust 迭代器?