首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 到 IL 深度解析:第3章 選擇與循環 (2) - 無條件分支 br、布爾值表現與 if 語句編譯

     編輯:關於C語言

br 指令:IL 控制流的核心

br 無條件跳轉到指定標籤。br.s 為短跳轉(1 字節運算元),功能相同。範例中 br.s a2 使 ldc.i4.s 30 被略過,直接 ret 返回 20。

布爾值在 IL 的本質

  • C# true/false 編譯為整數 1/0。
  • 靜態建構函數 .cctor 中 ldc.i4.1 stsfld 初始化布爾欄位。
  • brfalse 掃描堆疊頂:1 視為 true(不跳轉),0 視為 false(跳轉)。

if 語句編譯為條件分支

// C# 代碼
class zzz {
    static bool i = true;
    public static void Main() {
        if (i)
            System.Console.WriteLine("hi");
    }
}

IL:

.method public hidebysig static void vijay() il managed {
    .entrypoint
    ldsfld bool zzz::i
    brfalse.s IL_0011
    ldstr "hi"
    call void [mscorlib]System.Console::WriteLine(string)
    IL_0011: ret
}

brfalse.s IL_0011 實現「若為假則跳過輸出」。

關鍵洞見

  • IL 無 if 指令,高階 if 全部轉為分支指令。
  • 標籤命名慣例 IL_XXXX 由反編譯器生成。
  • 理解分支指令是閱讀 IL 的基礎,也能區分「語言特性」與「CLR 核心機制」。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved