<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux 內(nèi)核從 C89 遷移到 C11 新進(jìn)展

          共 1514字,需瀏覽 4分鐘

           ·

          2022-03-11 05:10

          ?來源:開源中國?


          內(nèi)核開發(fā)者 Arnd Bergmann?發(fā)出了一個(gè)新的補(bǔ)丁,允許 Linux 內(nèi)核在指定 C11 的 GNU 方言時(shí)默認(rèn)使用“-std=gnu11”。這樣一來,內(nèi)核將允許使用不錯(cuò)的 C99/C11 功能,而不是僅限于 C89。鑒于這一變更已經(jīng)得到了 Linus Torvalds 的支持,如果沒有發(fā)現(xiàn)任何根本性的問題,它可能會(huì)在下一個(gè)內(nèi)核合并窗口中繼續(xù)進(jìn)行。

          在一次補(bǔ)丁討論中,Linus 提出了將 C 的標(biāo)準(zhǔn)版本從 gnu89 改為 gnu99 的選擇,它允許在 for() 循環(huán)中使用變量聲明。雖然 C99、C11 和后來的標(biāo)準(zhǔn)引入了許多其他功能,但其中大部分在 gnu89 中也已經(jīng)可以作為 GNU 擴(kuò)展使用。

          早些時(shí)候,gcc-5 曾試圖默認(rèn)為 -std=gnu1,但失敗了,因?yàn)楫?dāng)時(shí)這引起了對(duì)舊編譯器的指定初始化器的警告。現(xiàn)在,gcc-5.1 是用于構(gòu)建內(nèi)核的最小編譯器版本,這不再是一個(gè)問題。同樣地,"inline"函數(shù)的行為在 gnu89 和 gnu11 之間發(fā)生了變化,但這已經(jīng)通過定義"inline"包括 __attribute__((gnu_inline)) 來解決了,以便在不久前允許用 clang 來構(gòu)建。

          剩下的一個(gè)小問題是,在使用 -Werror 構(gòu)建時(shí)添加了一個(gè)針對(duì)負(fù)整數(shù)移位的 gcc 警告,這發(fā)生在"make W=1"選項(xiàng)中,以及內(nèi)核中的三個(gè)驅(qū)動(dòng)程序總是啟用 -Werror,但目前只在 i915 驅(qū)動(dòng)程序中觀察到。為了安全起見,在 Makefile 的任何 -Wextra 中添加 -Wno-shift-negative-value。

          Nathan Chancellor 報(bào)告了一個(gè)額外的 -Wdeclaration-after-statement 警告,出現(xiàn)在 arm 的 system header 中,這仍然需要一個(gè)解決方法。

          gnu99、gnu11、gnu1x 和 gnu17 之間的差異相當(dāng)小,主要影響內(nèi)核從不啟用的 -Wpedantic 級(jí)別的警告。在這些版本之間,gnu11 是被所有支持的編譯器版本所支持的最新版本,盡管它只是 gcc-5 的默認(rèn)版本,而所有其他支持的 gcc 或 clang 版本都默認(rèn)為 gnu1x/gnu17。

          事件的前因后果為,Linux 內(nèi)核社區(qū)日前曾討論了是否要為內(nèi)核采用現(xiàn)代 C 語言標(biāo)準(zhǔn)。Linus 在討論中提出了從 C89 提升到 C99 的想法;并表示,內(nèi)核代碼一直停留在 C89 的原因之一是編譯器 gcc 的舊版本會(huì)出現(xiàn)奇怪的問題,導(dǎo)致初始化程序被破壞。但現(xiàn)在內(nèi)核要求的 GCC 最低版本已經(jīng)提高到了 v5.1,那些 bug 可能已經(jīng)不再相關(guān)。

          最后事實(shí)證明,以當(dāng)前內(nèi)核的最低版本編譯器要求和當(dāng)前代碼的條件,他們實(shí)際上可以開始使用 C11 構(gòu)建內(nèi)核。Arnd Bergmann 提議直接升級(jí)到 C11 甚至 C2x。雖然他不確定 C11 是否會(huì)帶來任何對(duì)內(nèi)核有用的新內(nèi)容,但如果升級(jí)到 C17 或 C2x,會(huì)破壞對(duì) gcc-5/6/7 的支持;因此升級(jí)到 C11 更容易實(shí)現(xiàn),而且跨越太大內(nèi)核社區(qū)未必接受。

          Linus 對(duì)該想法表示了贊成。在 Bergmann?確認(rèn)此舉可行后,Linus 宣布將在下一個(gè)內(nèi)核版本 v5.18 中嘗試使用 C11 標(biāo)準(zhǔn)。

          Linux學(xué)習(xí)指南

          有收獲,點(diǎn)個(gè)在看?

          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲se视频 | a黄色在线观看 | 色婷婷大香蕉 | 日韩不卡一区 | 欧美成人性爱在线观看 |