C 什么是函数说明符?像_inline _NORETURN

C what is a function specifier? like _inline _NORETURN

今天我开始学习 OpenCL 是因为我遇到了像 _kernel 这样的函数说明符。比我搜索它,我发现许多函数说明符,如 _inline _noreturn。我想知道什么是函数说明符及其用途是什么?我看过很多C编程书籍,但从来没有找到这样的术语?

_Noreturn 

上面的说明符是否与void相似?

你需要一本熟悉C11的书(ISO/IEC 9899:2011)。关键字 _Noreturn 是一个新的函数说明符,如 inline(在 C99 或 ISO/IEC 9899:1999 中添加)。它不是 void 中的类型(或类型缺失)。 _Noreturn表示函数没有return。例如,C11 标准声明 exit() 是一个不包含 return:

的函数
#include <stdlib.h>
_Noreturn void exit(int status);

还有一个 header、<stdnoreturn.h> 提供

#define noreturn _Noreturn

注意名称_Noreturn来自为实现保留的命名空间;名称 noreturn 可能已被用户使用。 _Noreturn 破坏的任何代码已经在滥用为实现保留的命名空间。

您还会发现使用 compiler-specific 机制的旧代码,例如 GCC 中的 __attribute__((noreturn))

通常,函数说明符标识函数的属性,这些属性不直接是函数的类型。例如,inline 暗示该函数可能适合内联——这是对 compiler/optimizer 的暗示。类似地,_Noreturn 是对 compiler/optimizer 的提示,即如果调用函数,控制将永远不会 return 到调用代码。

Here's a good link explaining function specifiers

我引用了一段更准确地回答了您的具体问题的摘录:

_Noreturn (since C11) - specifies that the function does not return to where it was called from.

我有一个full machine-readable C11 grammar (with GNU extensions)

此处引用相关部分:

function-definition:
    declaration-specifiers_opt declarator declaration-list_opt compound-statement

declaration-specifiers:
    storage-class-specifier declaration-specifiers_opt
    type-specifier declaration-specifiers_opt
    type-qualifier declaration-specifiers_opt
    function-specifier declaration-specifiers_opt
    alignment-specifier declaration-specifiers_opt
    attributes declaration-specifiers_opt

function-specifier:
    inline
    _Noreturn

我会接受为其他 compilers/languages 添加新语法的拉取请求,因为我不知道还有其他人在收集它们。