Поскольку сбой является признаком вызова неопределенного поведения, и поскольку вызов неопределенного поведения может привести к чему угодно, включая сбой, я не думаю, что вы действительно хотите вывести свою программу из строя, но просто поместите ее в отладчик. Наиболее переносимый способ сделать это, вероятно, abort()
.
Хотя raise(SIGABRT)
имеет тот же эффект, это, безусловно, больше писать. Однако оба способа могут быть перехвачены путем установки обработчика сигнала для SIGABRT
. Поэтому, в зависимости от вашей ситуации, вы можете / должны поднять другой сигнал. SIGFPE
, SIGILL
, SIGINT
, SIGTERM
или SIGSEGV
могут быть подходящим способом, но все они могут быть перехвачены.
Когда вы можете быть непереносимыми, ваш выбор может быть еще шире, например, использование SIGBUS
в Linux.