再次在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)
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)
如果要使用不支持该扩展的编译器编译代码,则使用它,导致它被忽略而不是被视为语法错误.一些属性采用多个参数; 将整个参数列表包装在一组额外的括号中,允许整个列表被处理,就预处理器而言,作为单个参数.)
| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |