c - 哪些可用的 GNU C 扩展在 C99 中实现起来并非易事?

标签 c linux gcc c99 language-extension

为什么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/

相关文章:

linux - 向 cmake 添加库

c++ - 加速单个文件的 gcc 编译

c++ - GCC 的已知 C/C++ 优化是什么

c - 如何在不使用strtok的情况下根据特定字符拆分字符串

objective-c - 如何改变这个程序的输入? (C语言)

linux - NginX 作为多个子域的 HTTPS 反向代理?

c++ - 用g++编译多线程代码

C - 为什么 getopt 在 Linux 上返回 255?

c - C语言中的指针(代码解释)

linux - 我应该使用哪个 Linux 发行版作为 Xen 主机?