В файле 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 на самом деле не имеет «сигналов» под капотом, и все это слой эмуляции поверх различных встроенных механизмов обмена сообщениями. в Windows, обернутые стандартной библиотекой C++11, почему они выбрали что-то непереносимое для SIGABRT
по умолчанию? Ожидают ли они, что люди будут использовать его в качестве аргумента для raise()
или для сравнения в обработчике сигналов?
Единственная документация, которую я могу найти относительно существования SIGABRT_COMPAT
, — это комментарий в заголовочном файле и таблица в онлайн-документация, которая содержит не больше информации, чем заголовок.
Стандарт даже не определяет это: https://en.cppreference.com/w/cpp/header/csignal
Я понимаю, что все это символические значения, и можно считать плохой формой полагаться на то, что они являются конкретными значениями (хотя это может быть полезно), но это должно быть здесь по какой-то причине.
Это немного огорчает, потому что кажется, что это сделано из соображений переносимости, но в то же время похоже, что его использование уменьшает переносимость кода, поскольку оно определено только в UCRT.
SIG*
, а не числа. Так что это не имеет значения. Однако я не уверен, что MS оправдывает наличие_COMPAT
. - person R.. GitHub STOP HELPING ICE   schedule 19.02.2019kill
команда. Я не вижу, где это накладывает требование на интерфейс C; возможно, числа, которые принимает командаkill
, отличаются от чисел, используемых в интерфейсах C. - person R.. GitHub STOP HELPING ICE   schedule 19.02.2019