标准C(gcc特定功能)?

Linux内核代码使用“statement-expression”和typeof扩展,使其只能在gcc下编译。

更多的是我想的,更多的是没有意义的。

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

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

编辑:当我说它击败可移植性时,我在不同的上下文中使用它。 我认为,通过符合标准C,任何支持标准C的编译器(这正是创建一个标准的目的 - 统一C的所有不同方言)将被接受,因此更便携。 当然,由于gcc非常流行,并且gcc支持zillion体系结构,所以这条线几乎毫无意义。 我只是问是否有不符合标准C的具体理由。


为什么Linux内核开发人员担心如何使用Microsoft Visual Studio编译器或IBM xlC编译器来运行代码?

当你编写一个内核时,你需要非常精确地控制更多的东西,比如精确的内存布局,比你在用户空间中(通常)要精确的多。 这样的控件在C标准中没有被真正考虑(例如,左边是实现定义的特性),所以要么是某些扩展是必要的,要么依赖于编译器的怪癖。

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


以下是关于所使用的特定扩展的一些很好的背景。 这不是从“为什么?”的角度写的,但它应该给你一些关于选择这种方法的理由的良好背景:

http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/


Linux内核代码是一个复杂的软件。 海湾合作委员会提供的设施越多,编码人员就会越高兴。

他们为什么会关心可移植性? gcc几乎在每个硬件配置PLUS下编译代码,它为它们提供了很好的功能。 他们为什么会关心Linux是否可以用另一个编译器编译?

今天,便携式代码对我们来说是一个很普遍的概念,我们认为它应该存在于任何地方。 但事实并非如此。 例如,如果一个编译器提供对C的实时扩展,美国国家航空航天局将毫无顾虑地使用它来实现可移植性。 重要的一点是这些功能太好了,以至于没有使用过的可移植性(我的意思是,谁会用MS Visual Studio编译内核?)

链接地址: http://www.djcxy.com/p/73553.html

上一篇: standard C (gcc specific features)?

下一篇: Confused by use of double logical not (!!) operator