_Noreturn функция-спецификатор
Указывает, что функция не возвращается к своему месту вызова.
Синтаксис
_Noreturn функция_объявление |
(с 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: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