46 lines
1.2 KiB
Plaintext
46 lines
1.2 KiB
Plaintext
/* ===== 模块7:高级特性 =====
|
||
* test15_defer — 延迟执行
|
||
* 难度:3/5
|
||
* 验证点:defer 语句、defer 块、多个 defer(逆序执行)、
|
||
* 函数中 defer、块作用域 defer
|
||
*/
|
||
#[extern("vm")] fn vm_printf(fmt: *u8, ...) void;
|
||
|
||
fn with_cleanup() void {
|
||
defer vm_printf(" inner defer\n");
|
||
vm_printf(" inside with_cleanup\n");
|
||
}
|
||
|
||
fn main() i32 {
|
||
vm_printf("--- defer test ---\n");
|
||
|
||
/* defer 语句 */
|
||
defer vm_printf("defer1\n");
|
||
vm_printf("after defer1\n");
|
||
|
||
/* defer 块 */
|
||
defer {
|
||
vm_printf("defer block\n");
|
||
}
|
||
vm_printf("after defer block\n");
|
||
|
||
/* 函数内 defer */
|
||
with_cleanup();
|
||
vm_printf("after with_cleanup\n");
|
||
|
||
/* 多个 defer 应逆序执行出作用域应该立刻执行,包括循环作用域 */
|
||
{
|
||
defer vm_printf("block defer last\n");
|
||
defer vm_printf("block defer middle\n");
|
||
defer vm_printf("block defer first (should print third)\n");
|
||
}
|
||
|
||
/* 多个 defer 应逆序执行 */
|
||
defer vm_printf("defer last\n");
|
||
defer vm_printf("defer middle\n");
|
||
defer vm_printf("defer first (should print third)\n");
|
||
|
||
vm_printf("--- defer test end ---\n");
|
||
ret 0;
|
||
}
|