Spec-Zone.ru › C

Спецификатор функции _Noreturn (начиная с C11)(устарел в C23)

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

Синтаксис

_Noreturn function_declaration (начиная с 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:2024):
    • 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)(устарел)
{{{notes}}}
указывает, что функция не возвращается
(спецификатор атрибута)
Документация по C++ для [[noreturn]]

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

Spec-Zone.ru

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