Linux 内核从 C89 迁移到 C11 新进展

内核开发者 Arnd Bergmann 发出了一个新的补丁,允许 Linux 内核在指定 C11 的 GNU 方言时默认使用“-std=gnu11”。这样一来,内核将允许使用不错的 C99/C11 功能,而不是仅限于 C89。鉴于这一变更已经得到了 Linus Torvalds 的支持,如果没有发现任何根本性的问题,它可能会在下一个内核合并窗口中继续进行。

在一次补丁讨论中,Linus 提出了将 C 的标准版本从 gnu89 改为 gnu99 的选择,它允许在 for() 循环中使用变量声明。虽然 C99、C11 和后来的标准引入了许多其他功能,但其中大部分在 gnu89 中也已经可以作为 GNU 扩展使用。

早些时候,gcc-5 曾试图默认为 -std=gnu1,但失败了,因为当时这引起了对旧编译器的指定初始化器的警告。现在,gcc-5.1 是用于构建内核的最小编译器版本,这不再是一个问题。同样地,"inline"函数的行为在 gnu89 和 gnu11 之间发生了变化,但这已经通过定义"inline"包括 __attribute__((gnu_inline)) 来解决了,以便在不久前允许用 clang 来构建。

剩下的一个小问题是,在使用 -Werror 构建时添加了一个针对负整数移位的 gcc 警告,这发生在"make W=1"选项中,以及内核中的三个驱动程序总是启用 -Werror,但目前只在 i915 驱动程序中观察到。为了安全起见,在 Makefile 的任何 -Wextra 中添加 -Wno-shift-negative-value。

Nathan Chancellor 报告了一个额外的 -Wdeclaration-after-statement 警告,出现在 arm 的 system header 中,这仍然需要一个解决方法。

gnu99、gnu11、gnu1x 和 gnu17 之间的差异相当小,主要影响内核从不启用的 -Wpedantic 级别的警告。在这些版本之间,gnu11 是被所有支持的编译器版本所支持的最新版本,尽管它只是 gcc-5 的默认版本,而所有其他支持的 gcc 或 clang 版本都默认为 gnu1x/gnu17。

事件的前因后果为,Linux 内核社区日前曾讨论了是否要为内核采用现代 C 语言标准。Linus 在讨论中提出了从 C89 提升到 C99 的想法;并表示,内核代码一直停留在 C89 的原因之一是编译器 gcc 的旧版本会出现奇怪的问题,导致初始化程序被破坏。但现在内核要求的 GCC 最低版本已经提高到了 v5.1,那些 bug 可能已经不再相关。

最后事实证明,以当前内核的最低版本编译器要求和当前代码的条件,他们实际上可以开始使用 C11 构建内核。Arnd Bergmann 提议直接升级到 C11 甚至 C2x。虽然他不确定 C11 是否会带来任何对内核有用的新内容,但如果升级到 C17 或 C2x,会破坏对 gcc-5/6/7 的支持;因此升级到 C11 更容易实现,而且跨越太大内核社区未必接受。

Linus 对该想法表示了赞成在 Bergmann 确认此举可行后,Linus 宣布将在下一个内核版本 v5.18 中尝试使用 C11 标准。

更多详情可查看邮件列表

优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/184534/linux-kernel-c89-to-c11

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。