Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ключевое слово
Ключевое слово _Noreturn было представлено в стандарте C11. Оно указывает компилятору, что функция, к которой оно применяется, не возвращается в вызывающий объект. Таким образом, компилятор знает, что код после вызова функции _Noreturn недостижим. Примером функции, которая не выполняет возврат, является abort. Если поток управления может вернуться в вызывающий объект, функция не должна иметь атрибут _Noreturn.
Это ключевое слово обычно используется в удобном макросе noreturn, который находится в файле <stdnoreturn.h> и сопоставляется с ключевым словом _Noreturn.
Ключевое слово _Noreturn (или эквивалентный ему макрос noreturn) позволяет четко описать предназначение функции пользователям, которые в дальнейшем будут работать с кодом, а также определить код, который по каким-либо причинам является недоступным.
Функция, помеченная noreturn, не должна включать тип возвращаемого значения, так как она не возвращает значение вызывающему объекту. Оно должно иметь значение void.
Пример использования макроса noreturn и ключевого слова _Noreturn
В следующем примере иллюстрируется использование ключевого слова _Noreturn и эквивалентного ему макроса noreturn.
Если используется макрос E0065, который можно игнорировать, функция IntelliSense может возвращать ложную ошибку noreturn. Ее появление не мешает запустить пример.
// Compile with Warning Level4 (/W4) and /std:c11
#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
noreturn void fatal_error(void)
{
exit(3);
}
_Noreturn void not_coming_back(void)
{
puts("There's no coming back");
fatal_error();
return; // warning C4645 - function declared with noreturn has a return statement
}
void done(void)
{
puts("We'll never get here");
}
int main(void)
{
not_coming_back();
done(); // warning c4702 - unreachable code
return 0;
}
Требования
| Макрос | Обязательный заголовок |
|---|---|
noreturn |
<stdnoreturn.h> |
См. также
/std (определение стандартной версии языка)
/W4 (выбор уровня предупреждения)
Предупреждение C4702
__declspec(noreturn)