Namespaces
Variants

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

From cppreference.net

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

目录

语法

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

说明

_Noreturn 关键字出现在函数声明中,指定该函数不会通过执行返回语句或到达函数体末尾而返回(它可能通过执行 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 exit...");
    exit_now(2);
    puts("This code is never executed.");
}

输出:

Preparing to exit...

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 6.7.4 函数说明符 (p: TBD)
  • 7.23 _Noreturn <stdnoreturn.h> (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018):
  • 6.7.4 函数说明符 (p: 90-91)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 263)
  • C11 标准 (ISO/IEC 9899:2011):
  • 6.7.4 函数说明符 (p: 125-127)
  • 7.23 _Noreturn <stdnoreturn.h> (p: 361)

参见

[[ noreturn ]] (C23) [[ _Noreturn ]] (C23) (deprecated)
指示函数不会返回
(属性说明符)
C++ 文档 关于 [[noreturn]]