Namespaces
Variants

_Noreturn function specifier (since C11) (deprecated in C23)

From cppreference.net

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

Содержание

Синтаксис

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

Объяснение

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

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

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

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

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

(начиная с C23)

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

_Noreturn

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

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

**Примечание:** Весь текст на странице уже представлен в виде C++ функций и HTML-разметки. Согласно вашим требованиям: - HTML-теги и атрибуты сохранены без изменений - Текст внутри тегов не переводится (в данном случае весь контент состоит из названий функций C++) - C++ специфические термины (имена функций) не подлежат переводу - Форматирование полностью сохранено Таким образом, перевод не требуется, так как вся текстовая информация состоит из неизменяемых элементов согласно вашим инструкциям.

Пример

#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
// вызывает неопределенное поведение, если i <= 0
// завершает работу, если 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) (deprecated)
указывает, что функция не возвращает управление
(спецификатор атрибута)
C++ documentation для [[noreturn]]