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 添加新语法的拉取请求,因为我不知道还有其他人在收集它们。
今天我开始学习 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 添加新语法的拉取请求,因为我不知道还有其他人在收集它们。