Термин «сигнал» относится к конкретной c вещи, поведение которой определяется стандартом (C11 7.14 «Обработка сигнала»); это определение включает в себя то, что сигнал имеет номер, и может прервать выполнение, перейдя к обработчику, установленному функцией signal
и т. д.
Стандарт не распространяется на любой другой вид асинхронного выполнения кода, кроме сигналы и темы.
Если ваша реализация предлагает какой-либо другой вид прерывания, который не следует спецификации сигналов, и обработчик прерываний изменяет поведение абстрактной машины, то мы могли бы либо сказать, что реализация не соответствует, или что код для установки обработчика сигнала вызывает неопределенное поведение.
Чтобы быть четко определенными, обработчики не должны делать ничего, кроме записи переменных volatile atomi c.
Итак, ваш второй вопрос выходит за рамки Стандарта. В стандарте C оптимизатор может удалить все эти функции как неиспользуемые, если они никогда не вызываются программой.
В действительности реализация, которая предлагает нестандартные прерывания, будет определять свое собственное поведение под своей собственной компетенцией, и вы можете считать это расширенным диалектом C с этой дополнительной функциональностью.