为什么UCRT中存在SIGABRT_COMPAT,它的预期用途是什么?

时间:2019-02-19 15:44:16

标签: c++ c visual-c++ msvcrt

在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

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

这让我感到困惑。由于Windows并没有真正的底层“信号”,而这全是C ++ 11标准库包装的various messaging mechanisms native to Windows之上的仿真层,为什么他们选择了一些不可移植的东西默认的SIGABRT?他们是否希望人们将其用作raise()的参数,或者用于信号处理程序中的比较?

我能找到的关于SIGABRT_COMPAT存在的唯一文档是头文件中的注释,以及online documentation中的表,其描述性不比头大。

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

我意识到这些都是符号值,依赖于它们是特定值(though it can be useful)可能会被认为是较差的形式,但这一定是有原因的。

看到它有点令人不安,因为它似乎出于可移植性原因而存在,但与此同时,由于它仅在UCRT中定义,因此看起来像减少了代码的可移植性。

0 个答案:

没有答案