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

Ace*_*Ace 0 c c++ function

再次在linux内核中找到了那些神秘的函数定义.该函数的签名如下:

static void __sched __schedule(void)
Run Code Online (Sandbox Code Playgroud)

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

这是__sched的定义

 #define __sched    __attribute__((__section__(".sched.text")))
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 6

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

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

static void __attribute__((__section__(".sched.text"))) __schedule(void)
Run Code Online (Sandbox Code Playgroud)

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

由于__sched或者更确切地说,它扩展到的序列不是类型名称,因此它和它之间没有冲突void.

(__attribute__允许宏定义的语法中的双括号如

#define __attribute__(arg)
Run Code Online (Sandbox Code Playgroud)

如果要使用不支持该扩展的编译器编译代码,则使用它,导致它被忽略而不是被视为语法错误.一些属性采用多个参数; 将整个参数列表包装在一组额外的括号中,允许整个列表被处理,就预处理器而言,作为单个参数.)