Почему SIGABRT_COMPAT существует в UCRT и для чего он предназначен? - PullRequest
0 голосов
/ 19 февраля 2019

В 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 Iсм. SIGABRT также сопоставлен с 6.

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

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

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

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

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

...