再次在 linux 内核中发现了那些神秘的函数定义。该函数的签名如下:
static void __sched __schedule(void)
现在它有 void
和 __sched
作为返回类型。有人可以解释一下这些标识符在那里做什么吗?它不应该是 void 或
__sched` 吗?怎么可能两者兼而有之?
这是 __sched
的定义:
#define __sched __attribute__((__section__(".sched.text")))
最佳答案
void
是标准的 C 类型,表示该函数不返回结果。
__sched
是一个根据您引用的定义展开的宏,使声明等同于:
static void __attribute__((__section__(".sched.text"))) __schedule(void)
__attribute__
是 gcc(以及与 gcc 兼容的编译器)支持的语言扩展。其含义记录在 gcc manual 中。 .它指定为函数生成的代码应放在目标文件的指定部分。
因为 __sched
,或者说它扩展到的序列,不是类型名称,所以它和 void
之间没有冲突。
(__attribute__
语法中的双括号允许像这样的宏定义
#define __attribute__(arg)
如果您想使用不支持该扩展的编译器编译代码,则使用该代码,导致它被忽略而不是被视为语法错误。有些属性有多个参数;将整个参数列表包裹在一组额外的括号中,就预处理器而言,可以将整个列表视为单个参数。)
关于c++ - Linux 内核中的 C func 签名 : include/linux/sched. h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493174/