_Noreturn 函数说明符

来自cppreference.com
< c‎ | language


指明函数不会返回到其调用点。

语法

_Noreturn 函数声明 (C11 起)(C23 中弃用)

解释

_Noreturn 关键词出现于函数声明中,指定函数不会由于执行到 return 语句或抵达函数体结尾而返回(可能通过执行 longjmp 返回)。若声明为 _Noreturn 的函数返回,则行为未定义。若编译器能检测此错误,则推荐编译器予以诊断。

_Noreturn 说明符可以在同一函数声明中出现多于一次,行为与只出现一次相同。

此说明符通常通过便利宏 noreturn 使用,该宏于头文件 <stdnoreturn.h> 提供。

_Noreturn 函数说明符被弃用。应该用 [[noreturn]] 属性代替。

noreturn 亦被弃用。

(C23 起)

关键词

_Noreturn

标准库

下列标准库中的函数为 noreturn

示例

#include <stdio.h>
#include <stdlib.h>
#include <stdnoreturn.h>
 
// 在 i <= 0 时导致未定义行为
// 在 i > 0 时退出
noreturn void exit_now(int i) // 或 _Noreturn void exit_now(int i)
{
    if (i > 0)
        exit(i);
}
 
int main(void)
{
  puts("Preparing to stop...");
  exit_now(2);
  puts("This code is never executed.");
}

输出:

Preparing to exit...

引用

  • C23 标准(ISO/IEC 9899:2024):
  • 6.7.4 Function specifiers (第 TBD 页)
  • 7.23 _Noreturn <stdnoreturn.h> (第 TBD 页)
  • C17 标准(ISO/IEC 9899:2018):
  • 6.7.4 Function specifiers (第 90-91 页)
  • 7.23 _Noreturn <stdnoreturn.h> (第 263 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 6.7.4 Function specifiers (第 125-127 页)
  • 7.23 _Noreturn <stdnoreturn.h> (第 361 页)

参阅

[[noreturn]](C23)
[[_Noreturn]](C23)(弃用)
指定函数不会返回
(属性指示符)