<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                我們知道,一個C程序由若干個函數組成,C程序的執行實際上就是函數之間的相互調用。請看下面的代碼: ~~~ #include <stdio.h> void funcA(int m, int n){ printf("funcA被調用\n"); } void funcB(float a, float b){ funcA(100, 200); printf("funcB被調用\n"); } int main(){ funcB(19.9, 28.5); printf("main被調用\n"); return 0; } ~~~ main() 調用了 funcB(),funcB() 又調用了 funcA()。對于main() 調用 funcB(),我們稱 main() 是調用方,funcB() 是被調用方;同理,對于 funcB() 調用 funcA(),funcB() 是調用方,funcA() 是被調用方。 函數的參數(實參)由調用方壓入棧中供被調用方使用,它們之間要有一致的約定。例如,參數是從左到右入棧還是從右到左入棧,如果雙方理解不一致,被調用方使用參數時就會出錯。 以 funcB() 為例,假設 main() 函數先將 19.9 入棧,后將 28.5 入棧,但是 funcB() 在使用這些實參時卻認為 28.5 先入棧,19.9 后入棧,那么就一定會產生混亂,誤以為19.9 是傳遞給 b、28.5 是傳遞給 a 的。 所以,函數調用方和被調用方必須遵守同樣的約定,理解要一致,這稱為調用慣例(Calling Convention)。 一個調用慣例一般規定以下兩方面的內容: 1) 函數參數的傳遞方式,是通過棧傳遞還是通過寄存器傳遞(這里我們只講解通過棧傳遞的情況)。 2) 函數參數的傳遞順序,是從左到右入棧還是從右到左入棧。 3) 參數彈出方式。函數調用結束后需要將壓入棧中的參數全部彈出,以使得棧在函數調用前后保持一致。這個彈出的工作可以由調用方來完成,也可以由被調用方來完成。 4) 函數名修飾方式。函數名在編譯時會被修改,調用慣例可以決定如何修改函數名。 在C語言中,存在多種調用慣例,可以在函數聲明或函數定義時指定,例如: ~~~ #include <stdio.h> int __cdecl max(int m, int n); int main(){ int a = max(10, 20); printf("a = %d\n", a); return 0; } int __cdecl max(int m, int n){ int max = m>n ? m : n; return max; } ~~~ 函數調用慣例在函數聲明和函數定義時都可以指定,語法格式為: 返回值類型 ?調用慣例 ?函數名(函數參數) 在函數聲明處是為調用方指定調用慣例,而在函數定義處是為被調用方(也就是函數本身)指定調用慣例。 `__cdecl`是C語言默認的調用慣例,在平時編程中,我們其實很少去指定調用慣例,這個時候就使用默認的 \_\_cdecl。 > 注意:\_\_cdecl 并不是標準關鍵字,上面的寫法在 VC/VS 下有效,但是在 GCC 下,要使用 \_\_attribute\_\_((cdecl))。 除了 cdecl,還有其他調用慣例,請看下表: ![](https://box.kancloud.cn/7c4067489d2ec0f2c0274c550fa15433_719x268.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看