在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中定义,因此看起来像减少了代码的可移植性。