noreturn
Блок, относящийся только к системам Майкрософт
Атрибут __declspec
сообщает компилятору, что функция не возвращается. Затем компилятор знает, что код после вызова __declspec(noreturn)
функции недоступен.
Если компилятор обнаруживает функцию с путем элемента управления, которая не возвращает значение, он создает предупреждение (C4715) или сообщение об ошибке (C2202). Если путь к элементу управления не может быть достигнут из-за функции, которая никогда не возвращается, используйте __declspec(noreturn)
для предотвращения этого предупреждения или ошибки.
Примечание.
Добавление __declspec(noreturn)
в функцию, которая, как ожидается, возвращает, может привести к неопределенному поведению.
Пример
В следующем примере вызывается аргумент для отрицательного isZeroOrPositive
fatal
значения. В этом пути управления нет инструкции возврата, что приводит к предупреждению C4715, что не все пути управления возвращают значение. fatal
Объявление как смягчает это предупреждение, которое является желательным, так как __declspec(noreturn)
с момента fatal()
завершения программы нет смысла.
// noreturn2.cpp
#include <exception>
__declspec(noreturn) void fatal()
{
std::terminate();
}
int isZeroOrPositive(int val)
{
if (val == 0)
{
return 0;
}
else if (val > 0)
{
return 1;
}
// this function terminates if val is negative
fatal();
}
int main()
{
isZeroOrPositive(123);
}
Завершение блока, относящегося только к системам Майкрософт
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по