为什么linux内核使用非标准C(gcc特定功能)编码? [关闭]

2024-01-01

Linux 内核代码使用“语句表达式”和 typeof 扩展,使其只能在 gcc 下编译。

越想越觉得没有道理。

它违背了可移植性和标准 C 的目的。 (现在linux内核代码需要一个支持gcc扩展的特定编译器)。

这是一个糟糕的设计选择,还是有特定原因让 Linux 内核代码特定于 gcc?

编辑:当我说它破坏了可移植性时,我在不同的上下文中使用了它。我在想,通过遵守标准 C,它会被任何支持标准 C 的编译器所接受(这正是创建标准的目的——统一 C 的所有不同方言),因此更加可移植。当然,由于 gcc 如此流行,并且 gcc 支持无数种体系结构,因此这一行几乎没有任何意义。我只是想问不符合标准 C 是否有具体的理由。


为什么 Linux 内核开发人员会担心他们的代码能否在 Microsoft Visual Studio 编译器或 IBM xlC 编译器上运行?

当您编写内核时,您需要非常精确地控制比用户空间中(通常)更多的东西,例如精确的内存布局。 C 标准中并未真正考虑此类控件(例如,保留为实现定义的特征),因此要么需要一些扩展,要么需要依赖编译器的怪癖。

坚持使用一个特定的编译器,利用其扩展,是一个理性的决定。代码不需要跨编译器可移植 - 它需要在不同的硬件平台上高效且可移植。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么linux内核使用非标准C(gcc特定功能)编码? [关闭] 的相关文章

随机推荐