Почему 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 на самом деле не имеет «сигналов» под капотом, и все это слой эмуляции поверх различных встроенных механизмов обмена сообщениями. в Windows, обернутые стандартной библиотекой C++11, почему они выбрали что-то непереносимое для SIGABRT по умолчанию? Ожидают ли они, что люди будут использовать его в качестве аргумента для raise() или для сравнения в обработчике сигналов?

Единственная документация, которую я могу найти относительно существования SIGABRT_COMPAT, — это комментарий в заголовочном файле и таблица в онлайн-документация, которая содержит не больше информации, чем заголовок.

Стандарт даже не определяет это: https://en.cppreference.com/w/cpp/header/csignal

Я понимаю, что все это символические значения, и можно считать плохой формой полагаться на то, что они являются конкретными значениями (хотя это может быть полезно), но это должно быть здесь по какой-то причине.

Это немного огорчает, потому что кажется, что это сделано из соображений переносимости, но в то же время похоже, что его использование уменьшает переносимость кода, поскольку оно определено только в UCRT.


person Seltzer    schedule 19.02.2019    source источник
comment
Представление о том, что одно значение является переносимым, а другое — непереносимым, ошибочно. Числовые значения, за исключением, возможно, общеизвестной 9, которая является стандартом де-факто, не являются чем-то, на что могут полагаться переносимые или даже непереносимые программы на разных платформах. Если вы хотите использовать сигнал, вы используете имена макросов SIG*, а не числа. Так что это не имеет значения. Однако я не уверен, что MS оправдывает наличие _COMPAT.   -  person R.. GitHub STOP HELPING ICE    schedule 19.02.2019
comment
Единственное место, где сами числа полезны, — это определение причин непреднамеренного отключения. Числа для некоторых из них (включая SIGABRT) определены POSIX, поэтому они довольно надежны, но абсолютно верно (и я это отмечаю), что следует использовать символические значения.   -  person Seltzer    schedule 19.02.2019
comment
Действительно, я не знал, но POSIX действительно определяет некоторые числа для kill команда. Я не вижу, где это накладывает требование на интерфейс C; возможно, числа, которые принимает команда kill, отличаются от чисел, используемых в интерфейсах C.   -  person R.. GitHub STOP HELPING ICE    schedule 19.02.2019