<跨风格="颜色:# 000000 ">内核开发者Arnd伯格曼发出了一个新的补丁,允许Linux内核在指定C11的GNU方言时默认使用“化=gnu11”。这样一来,内核将允许使用不错的C99/C11功能,而不是仅限于C89。鉴于这一变更已经得到了Linus Torvalds的支持,如果没有发现任何根本性的问题,它可能会在下一个内核合并窗口中继续进行。
<跨风格="颜色:# 000000 ">在一次补丁讨论中,莱纳斯提出了将C的标准版本从gnu89改为gnu99的选择,它允许在()的循环中使用变量声明,虽然C99, C11和后来的标准引入了许多其他功能,但其中大部分在gnu89中也已经可以作为GNU扩展使用。
<跨风格="颜色:# 000000 ">早些时候,gcc-5曾试图默认为化gnu1,但失败了,因为当时这引起了对旧编译器的指定初始化器的警告。现在,gcc - 5.1是用于构建内核的最小编译器版本,这不再是一个问题。同样地,“内联”函数的行为在gnu89和gnu11之间发生了变化,但这已经通过定义“内联”包括__attribute__ ((gnu_inline))来解决了,以便在不久前允许用铿锵声来构建。
<跨风格="颜色:# 000000 ">剩下的一个小问题是,在使用-Werror构建时添加了一个针对负整数移位的gcc警告,这发生在“W=1”选项中,以及内核中的三个驱动程序总是启用-Werror,但目前只在i915驱动程序中观察到。为了安全起见,在Makefile的任何-Wextra中添加-Wno-shift-negative-value。
<跨风格="颜色:# 000000 ">内森总理报告了一个额外的-Wdeclaration-after-statement警告,出现在手臂的系统消息头中,这仍然需要一个解决方法。
<跨风格="颜色:# 000000 "> gnu99, gnu11, gnu1x和gnu17之间的差异相当小,主要影响内核从不启用的-Wpedantic级别的警告。在这些版本之间,gnu11是被所有支持的编译器版本所支持的最新版本,尽管它只是gcc-5的默认版本,而所有其他支持的gcc或叮当声版本都默认为gnu1x/gnu17。
事件的前因后果为,Linux内核社区日前曾赞成 。 在伯格曼 <跨风格=" background - color: # ffffff;颜色:# 333333 "> 确认 此举可行后,莱纳斯 宣布将在下一个内核版本v5.18中尝试使用C11标准。
更多详情可查看邮件列表。
0 留言