Dav*_*Dev 3 c# if-statement definition intermediate-language
将if语句编译成IL时,语句是什么样的?
这是C#中一个非常简单的构造.sombody可以给我一个更抽象的定义,它究竟是什么?
以下是一些if陈述以及它们如何转换为IL:
ldc.i4.s 0x2f var i = 47;
stloc.0
ldloc.0 if (i == 47)
ldc.i4.s 0x2f
bne.un.s L_0012
ldstr "forty-seven!" Console.WriteLine("forty-seven!");
call Console::WriteLine
L_0012:
ldloc.0 if (i > 0)
ldc.i4.0
ble.s L_0020
ldstr "greater than zero!" Console.WriteLine("greater than zero!");
call Console::WriteLine
L_0020:
ldloc.0 bool b = (i != 0);
ldc.i4.0
ceq
ldc.i4.0
ceq
stloc.1
ldloc.1 if (b)
brfalse.s L_0035
ldstr "boolean true!" Console.WriteLine("boolean true!");
call Console::WriteLine
L_0035:
ret
Run Code Online (Sandbox Code Playgroud)
有一点需要注意:IL指令总是"相反".if (i > 0)转化为有效意味着"如果i <= 0,然后跳过if块体"的东西.
使用分支指令将根据堆栈顶部的值跳转到目标指令。
brfalse Branch to target if value is zero (false)
brtrue Branch to target if value is non-zero (true)
beq Branch to target if equal
bge Branch to target if greater than or equal to
bgt Branch to target if greater than
ble Branch to target if less than or equal to
blt Branch to target if less than
bne.un Branch to target if unequal or unordered
Run Code Online (Sandbox Code Playgroud)