C func签名Linux内核:Include/Linux/Sched.h

C func signature inside Linux Kernel: include/linux/sched.h

本文关键字:Linux Sched Include 内核 func 签名      更新时间:2023-10-16

再次在linux内核内发现了一次这些奥术函数定义。功能的签名读取:

static void __sched __schedule(void)

现在,它同时将void__sched作为返回类型。有人可以解释这些标识符在那里所做的事情吗?不应该是void or __sched`吗?怎么会俩?

这是__sched的定义:

 #define __sched    __attribute__((__section__(".sched.text")))

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

__sched是一个按照您引用的定义扩展的宏,使声明等同于:

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

__attribute__是GCC支持的语言扩展(以及与GCC兼容的编译器)。GCC手册中记录了其含义。它指定该函数的生成代码应放在对象文件中的指定部分中。

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

__attribute__的语法中的双括号允许

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

,导致它被忽略而不是将其视为语法错误。一些属性需要多个参数。将整个参数列表包装在一组额外的括号中,就可以作为单个参数而对整个列表进行处理。)