前言
return,break,continue這三個(gè)都是控制語(yǔ)句艇潭,只是return 返回值可有可無(wú),break,continue一般只是配合著循環(huán)語(yǔ)句使用戏蔑,當(dāng)然你要瞎幾把用也行蹋凝,只是表象會(huì)很奇怪,一般也不這用辛臊。
正文
- return : 表示終結(jié)返回一個(gè)值仙粱。
- break:表示跳出一個(gè)循環(huán),不過(guò)沒(méi)有循環(huán)時(shí)彻舰,就是返回一個(gè)null值
- continue:表示跳過(guò)當(dāng)前循環(huán)伐割,不過(guò)沒(méi)有循環(huán)時(shí),就是返回一個(gè)null值
return的實(shí)現(xiàn)
statement_control_t *execute_return_statement(return_statement_t *rs, hash_t *variable_table) {
statement_control_t *control_res = create_null_statement_control();
zvalue_t *expression_res = execute_expression(rs->expression, variable_table);
control_res->type = statement_control_type_return;
control_res->result = expression_res;
return control_res;
}
是不是很簡(jiǎn)單刃唤,就是運(yùn)行返回的表達(dá)式的結(jié)果隔心,結(jié)束
break的實(shí)現(xiàn)
statement_control_t *execute_break_statement() {
statement_control_t *control_res = create_null_statement_control();
control_res->type = statement_control_type_break;
return control_res;
}
更簡(jiǎn)單
continue的實(shí)現(xiàn)
statement_control_t *execute_continue_statement() {
statement_control_t *control_res = create_null_statement_control();
control_res->type = statement_control_type_continue;
return control_res;
}
也簡(jiǎn)單
控制語(yǔ)句的核心在
statement_control_t *execute_statement(statement_list_t *statement_list, hash_t *variable_table) {
// 空語(yǔ)句列表
if (is_empty(statement_list)) {
return create_default_statement_control();
}
int is_include = 0, is_break = 0;
statement_control_t *control_exe = NULL, *control_res = NULL;
statement_list_item_t *current, *old_top;
old_top = current = statement_list->top;
//
while (current) {
statement_t *statement = current->statement;
switch (statement->type) {
case statement_type_expression:
execute_expression_statement(statement->u.e, variable_table);
break;
case statement_type_return:
control_exe = execute_return_statement(statement->u.r, variable_table);
break;
case statement_type_if:
control_exe = execute_if_statement(statement->u.i, variable_table);
break;
case statement_type_continue:
control_exe = execute_continue_statement();
break;
case statement_type_global:
break;
case statement_type_for:
control_exe = execute_for_statement(statement->u.f, variable_table);
break;
case statement_type_break:
control_exe = execute_break_statement();
break;
case statement_type_include:
execute_include_statment(statement->u.in, statement_list);
is_include = 1;
break;
default:
error_exception("Undefined statement type(%d)!", statement->type);
}
// 判斷運(yùn)行的語(yǔ)句值并生成結(jié)果集
if (is_not_empty(control_exe)) {
switch (control_exe->type) {
case statement_control_type_return:
case statement_control_type_break:
case statement_control_type_continue:
control_res = control_exe;
is_break = 1;
break;
case statement_control_type_default:
default:
break;
}
}
if (is_break) {
break;
}
// 回到頭部
if (is_include) {
current = statement_list->top;
is_include = 0;
} else {
current = current->next;
}
// 頭部
statement_list->top = current;
}
statement_list->top = old_top;
//沒(méi)有運(yùn)行值
if (is_empty(control_res)) {
control_res = create_default_statement_control();
}
return control_res;
}
結(jié)束語(yǔ)
return,break,continue 都是控制語(yǔ)句,特性不同尚胞,都會(huì)跳出當(dāng)前的執(zhí)行棧硬霍。跳出的動(dòng)作不同。