Skip to content

3. 控制流

3.1 if 语句

x: int = 10

if x > 0:
    y = 1
elif x < 0:
    y = -1
else:
    y = 0

生成 C:

if (x > 0) {
    y = 1;
}
else if (x < 0) {
    y = -1;
}
else {
    y = 0;
}

3.2 for 循环

3.2.1 range(n) → C for

# 基本形式
for i in range(10):
    sum += i

# 带起始值
for i in range(5, 10):
    pass

# 带步长
for i in range(0, 10, 2):
    pass

生成 C:

for (int i = 0; i < 10; i += 1) {
    sum += i;
}
for (int i = 5; i < 10; i += 1) { }
for (int i = 0; i < 10; i += 2) { }

翻译器自动将 range(start, stop, step) 展开为标准 C for 循环。 负步长(如 range(10, 0, -1))会生成 > 比较。

3.2.2 字符串遍历

# 遍历字符串
for c in name:
    if c == '\0':
        break

生成 C:

for (int __for_i = 0; name[__for_i] != 0; __for_i++) {
    char c = name[__for_i];
    if (c == '\0') { break; }
}

3.3 while 循环

i: int = 0
while i < 10:
    i += 1

生成 C:

while ((i < 10)) {
    i += 1;
}

3.4 do-while 循环

翻译器自动检测 while True: ... if cond: break 模式并转为 do-while

i: int = 0
while True:
    i += 1
    if i >= 10:
        break

生成 C:

do {
    i += 1;
} while (!(i >= 10));

条件:while True 循环体最后一条语句必须是 if test: break

3.5 break / continue / return

for i in range(100):
    if i == 50:
        break          # → break;
    if i % 2 == 0:
        continue       # → continue;
    if i > 90:
        return 0       # → return 0;

3.6 逻辑运算符

# and → &&
if x > 0 and y > 0:
    return 1

# or → ||
if x == 0 or y == 0:
    return -1

生成 C:

if (x > 0 && y > 0) { return 1; }
if (x == 0 || y == 0) { return -1; }

3.7 三目运算符

result = 1 if x > 0 else 2

生成 C:

result = (x > 0 ? 1 : 2);

3.8 自增 / 自减

翻译器识别 (k, k:=k+1)[0] 模式并优化为 k++

# Python 写法
val = (k, k := k + 1)[0]    # → k++
val = (k := k + 1)          # → ++k

生成 C:

val = k++;
val = ++k;