Спецификатор функции _Noreturn (начиная с C11)(устарел в C23)
Указывает, что функция не возвращается в точку вызова.
Синтаксис
_Noreturn function_declaration | (начиная с C11)(устарел в C23) |
Пояснение
Ключевое слово _Noreturn используется в объявлении функции и указывает, что функция не возвращается посредством выполнения оператора return или достижения конца тела функции (она может вернуться посредством выполнения longjmp). Если объявленная с _Noreturn функция возвращается, поведение не определено. Рекомендуется выдавать диагностику компилятора, если это можно обнаружить.
Спецификатор _Noreturn может встречаться в одном объявлении функции несколько раз; поведение такое же, как если бы он встретился один раз.
Этот спецификатор обычно используется через удобный макрос noreturn, предоставляемый заголовочным файлом <stdnoreturn.h>.
| Спецификатор функции Макрос | (начиная с C23) |
Ключевые слова
Стандартная библиотека
Следующие функции стандартной библиотеки объявлены как noreturn:
Пример
#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)
См. также
|
{{{notes}}} | указывает, что функция не возвращается (спецификатор атрибута) |
Документация по C++ для [[noreturn]] |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/language/noreturn