Spec-Zone.ru › C

_Noreturn функция-спецификатор

Указывает, что функция не возвращается к своему месту вызова.

Синтаксис

_Noreturn функция_объявление (с C11)(устарело в C23)

Объяснение

Ключевое слово _Noreturn появляется в объявлении функции и указывает, что функция не возвращается путем выполнения оператора return или достижением конца тела функции (она может возвратиться, выполнив longjmp). Если функция, объявленная _Noreturn, возвращается, поведение не определено. Рекомендуется использование диагностики компилятора, если это может быть обнаружено.

Спецификатор _Noreturn может появляться более одного раза в одном объявлении функции, поведение такое же, как если бы он появлялся один раз.

Этот спецификатор обычно используется через удобную макрос noreturn, которая предоставляется в заголовке <stdnoreturn.h>.

Спецификатор функции _Noreturn устарел. Следует использовать атрибут [[noreturn]].

Макрос noreturn также устарел.

(с C23)

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

_Noreturn

Стандартная библиотека

Следующие функции noreturn в стандартной библиотеке:

  • abort()
  • exit()
  • _Exit()
  • quick_exit()
  • thrd_exit()
  • longjmp()

Пример

#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
 
// causes undefined behavior if i <= 0
// exits if i > 0
noreturn void exit_now(int i) // or _Noreturn void exit_now(int i)
{
    if (i > 0)
        exit(i);
}
 
int main(void)
{
    puts("Preparing to exit...");
    exit_now(2);
    puts("This code is never executed.");
}

Вывод:

Preparing to exit...

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 6.7.4 Спецификаторы функций (с. TBD)
    • 7.23 _Noreturn <stdnoreturn.h> (с. TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 6.7.4 Спецификаторы функций (с. 90-91)
    • 7.23 _Noreturn <stdnoreturn.h> (с. 263)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 6.7.4 Спецификаторы функций (с. 125-127)
    • 7.23 _Noreturn <stdnoreturn.h> (с. 361)

См. также

[[noreturn]](C23)
[[_Noreturn]](C23)(устарело)
указывает, что функция не возвращается
(спецификатор атрибута)
Документация C++ для [[noreturn]]

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/_Noreturn

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API