Linux内核中的C函数签名:include / linux / sched.h

时间:2014-02-01 01:53:09

标签: c++ c function

再次在linux内核中找到了一些神秘的函数定义。函数的签名为:

static void __sched __schedule(void)

现在它有void和__sched作为返回类型。有人可以解释那些标识符在那里做什么。不应该是void还是__sched?两者怎么样?感谢。

这是__sched

的定义
 #define __sched         __attribute__((__section__(".sched.text")))

1 个答案:

答案 0 :(得分:5)

void是标准C类型,表示该函数不返回结果。

__sched是一个宏,根据您引用的定义进行扩展,使声明等同于:

static void __attribute__((__section__(".sched.text"))) __schedule(void)

__attribute__是gcc支持的语言扩展(以及与gcc兼容的编译器)。它的含义记录在gcc manual中。它指定生成的函数代码应放在目标文件的指定部分中。

由于__sched,或者它扩展到的序列,不是类型名称,因此它与void之间没有冲突。

__attribute__语法中的双括号允许像

这样的宏定义
#define __attribute__(arg)
如果要使用不支持该扩展的编译器编译代码,则使用

,导致忽略该代码而不将其视为语法错误。一些属性采用多个参数;将整个参数列表包装在一组额外的括号中允许整个列表被处理,就预处理器而言,作为单个参数。)