ctrl-alt-up/down для копирования строки (или вниз). Сопровождаемый alt-up/down часто намного более быстр, чем вставка копии
Сигналы полностью отличаются от исключений C ++. Вы не можете использовать блок C ++ try / catch для обработки сигнала. В частности, сигналы - это концепция POSIX, а не концепция языка C ++. Сигналы доставляются в ваше приложение ядром асинхронно, тогда как исключения C ++ - это синхронные события, определенные стандартом C ++.
Вы весьма ограничены в том, что вы можете переносить в обработчике сигналов POSIX. Обычная стратегия - иметь глобальный флаг типа sig_atomic_t
, который будет установлен в 1 в обработчике сигналов, а затем, возможно, longjmp
для соответствующего пути выполнения.
См. здесь для помощи в написании правильных обработчиков сигналов.
!!
преобразует результат в YES
или NO
.
Использование !! x
- это идиома из C. Результат этого выражения:
!! x == 0
when x == 0 // x равно нулю
!! x == 1
when x! = 0 // x не равно нулю
По крайней мере, в C вы можете использовать любое ненулевое выражение в качестве значения, которое удовлетворяет условию if ()
или другой условный поток управления. Однако иногда приятно знать, что «истинное значение» представлено как 1
, а не просто «ненулевым».
В Objective-C определено YES
как 1
, а не как «ненулевое». Таким образом, в Objective-C эта идиома C.
Другими словами:
!!
()
.
Этот поток может обрабатывать сигналы без ограничений, например, генерировать исключения или использовать другие механизмы связи. Удаление обработчика сигнала, вероятно, не является хорошей идеей, поскольку стек необязательно настраивается таким же образом, как для вызовов функций, поэтому отключение от обработчика сигнала может не работать как и ожидалось.
Необходимо сделать важное замечание для всех регистров, используемых C ++ ABI, которые сохраняются и повторно используются механизмом обработки сигналов.