C func签名Linux内核:Include/Linux/Sched.h
C func signature inside Linux Kernel: include/linux/sched.h
再次在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)
如果要使用不支持该扩展名的编译器编译代码,则使用,导致它被忽略而不是将其视为语法错误。一些属性需要多个参数。将整个参数列表包装在一组额外的括号中,就可以作为单个参数而对整个列表进行处理。)
相关文章:
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 如何找到锁定Linux futex的C++行
- 在linux上调试巨大的C++项目
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- c++方法参数只能在linux的发布模式下自行更改
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- 这里在 Linux 中具有"CreatePipe"和"CreateProcessW"功能吗?
- 函数在Windows或Linux上运行时表现不同
- 在Linux下捕获SIGKILL的C++程序
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- mysql C++ connector [mysql-connector-c++-8.0.19-linux-glibc2
- 这些是什么样的错误?即使我不在 Linux 上工作,我也遇到了 Linux 错误
- C func签名Linux内核:Include/Linux/Sched.h