【发布时间】:2021-03-14 08:36:10
【问题描述】:
我试图从递归函数中返回一个值,但不知何故总是得到错误的值。
我得到错误返回值的函数如下所示:
int statement_list(ParserData *data){
int result = ERR_SYN;
if(data->token.type == tt_right_bra)
{
if((result = load_token(data)) != 0) return result;
return 0;
}else if(data->token.type == tt_keyword_if ||
data->token.type == tt_eol ||
data->token.type == tt_id ||
data->token.type == tt_keyword_for ||
data->token.type == tt_keyword_return)
{
if((result = statement(data) != 0 )) return result;
if((result = statement_list(data) != 0 )) return result;
return 0;
}
return result;
程序按预期运行,然后进入函数 statement(),执行以下代码块:
else if (data->token.type == tt_left_par){
if(check_if_id_declared(symtable, data->prev_token.attribute.value) != 1){
result = ERR_SEM_BAD_DEFINITION;
return result;
}
}
如果条件为真(这是预期的),变量 result 应设置为 3(宏定义为 3),程序返回到函数 statement_list 并使用该值。在 statement_list 中,我现在期望结果 = 3,但是在程序返回后我保持 gettin result = 1。
我不知道为什么会这样,感谢您的任何建议。
【问题讨论】:
-
我建议重新编写函数的逻辑以创建简化且 minimal 的示例来演示该问题。错误的原因将变得很明显,或者您会看到简化版没有相同的问题,这将为您提供线索,表明其中一个差异导致了问题。
-
我看到了错误的括号。我猜
if((result = statement(data) != 0 )) return result;一定是if ( ( result = statement(data) ) != 0 ) return result;。=的优先级低于!=。
标签: c function recursion return-value