为什么Linux内核只能用GCC编译?某些项目真正需要哪些 GNU C 扩展?为什么?
最佳答案
这是 Linux 内核使用的几个 gcc 扩展:
- 内联汇编
- gcc 内置函数,例如 __builtin_expect、__builtin_constant、__builtin_return_address
- 功能属性来指定例如使用什么寄存器(例如 __attribute__((regparm(0)),__attribute__((packed, aligned(PAGE_SIZE))) ) )
- 特定代码取决于 gcc 预定义的宏(例如,某些版本中某些 gcc 错误的解决方法)
- switch case 中的范围(case 8 ... 15:)
还有一些:http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/
这些 gcc 细节中的许多细节都非常依赖于体系结构,或者由于 gcc 的实现方式而成为可能,并且可能没有意义由 C 标准指定。其他只是对 C 的方便扩展。由于构建 Linux 内核依赖于这些扩展,因此其他编译器必须提供与 gcc 相同的扩展才能构建内核。
并不是说 Linux 必须 依赖 gcc 的这些特性,例如NetBSD 内核很少依赖 gcc 特定的东西。
关于c - 哪些可用的 GNU C 扩展在 C99 中实现起来并非易事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678512/