再次在linux内核中找到了一些神秘的函数定义。函数的签名为:
static void __sched __schedule(void)
现在它有void和__sched作为返回类型。有人可以解释那些标识符在那里做什么。不应该是void还是__sched?两者怎么样?感谢。
这是__sched
的定义 #define __sched __attribute__((__section__(".sched.text")))
答案 0 :(得分:5)
void
是标准C类型,表示该函数不返回结果。
__sched
是一个宏,根据您引用的定义进行扩展,使声明等同于:
static void __attribute__((__section__(".sched.text"))) __schedule(void)
__attribute__
是gcc支持的语言扩展(以及与gcc兼容的编译器)。它的含义记录在gcc manual中。它指定生成的函数代码应放在目标文件的指定部分中。
由于__sched
,或者它扩展到的序列,不是类型名称,因此它与void
之间没有冲突。
(__attribute__
语法中的双括号允许像
#define __attribute__(arg)
如果要使用不支持该扩展的编译器编译代码,则使用,导致忽略该代码而不将其视为语法错误。一些属性采用多个参数;将整个参数列表包装在一组额外的括号中允许整个列表被处理,就预处理器而言,作为单个参数。)