noreturn

Блок, относящийся только к системам Майкрософт

Атрибут __declspec сообщает компилятору, что функция не возвращается. Затем компилятор знает, что код после вызова __declspec(noreturn) функции недоступен.

Если компилятор обнаруживает функцию с путем элемента управления, которая не возвращает значение, он создает предупреждение (C4715) или сообщение об ошибке (C2202). Если путь к элементу управления не может быть достигнут из-за функции, которая никогда не возвращается, используйте __declspec(noreturn) для предотвращения этого предупреждения или ошибки.

Примечание.

Добавление __declspec(noreturn) в функцию, которая, как ожидается, возвращает, может привести к неопределенному поведению.

Пример

В следующем примере вызывается аргумент для отрицательного isZeroOrPositivefatal значения. В этом пути управления нет инструкции возврата, что приводит к предупреждению 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);
}

Завершение блока, относящегося только к системам Майкрософт

См. также

__declspec
Ключевые слова