正如标题所说,我想要使用的功能会收到此警告。我希望我的函数能够找到结构的地址,其中.d
值等于或小于给函数distance
的那个,其字符串字段与“较小”相比较给定的字符串。 (由于其他因素,没有重复,所以> =相当于>)。
我很确定每一个if和else都有他们的回报(除非我是盲目的),而我根本不知道还有什么可能导致这个警告。
该功能正在查看的结构:
typedef struct Fixer_t SpelChk_En;
struct Fixer_t
{
char *word;
int d;
SpelChk_En *next;
};
功能:
/*
| Function: FindSpelPlace
| Action: Finds where to wedge the new entry
| Input: Speller first struct, distance and the word
| Returns: Address of the previous entry
*/
SpelChk_En *FindSpelPlace( SpelChk_En *speller , char *str , int distance )
{
if( speller->d < distance )
{
if( speller->next->d < distance )
return FindSpelPlace( speller->next , str, distance );
else if( speller->next->d > distance )
return speller;
else
{
if( strcmp(speller->next->word , str ) > 0 )
return speller;
else
return FindSpelPlace( speller->next , str , distance );
}
}
else if( speller->d == distance )
{
if( strcmp( speller->word , str ) < 0 )
{
if( strcmp( speller->next->word , str ) < 0 )
return FindSpelPlace( speller->next , str , distance );
else
return speller;
}
else
return speller;
}
else
{
//this can happen only with the first speller
return NULL;
}
//This turned out far bigger than I figured it would be...
}
答案 0 :(得分:1)
添加
return NULL;
作为函数的最后一个语句。
或修改功能只有一个出口点:
SpelChk_En *FindSpelPlace(SpelChk_En *speller, char *str, int distance)
{
SpelChk_En * result = NULL;
if (speller->d < distance)
{
if (speller->next->d < distance)
result = FindSpelPlace(speller->next, str, distance);
else if (speller->next->d > distance)
result = speller;
else
{
if (strcmp(speller->next->word, str) > 0)
result = speller;
else
result = FindSpelPlace(speller->next, str, distance);
}
}
else if (speller->d == distance)
{
if (strcmp(speller->word, str) < 0)
{
if (strcmp(speller->next->word, str) < 0)
result = FindSpelPlace(speller->next, str, distance);
else
result = speller;
}
else
result = speller;
}
return result;
}
这样代码就是
一句话:“更好”。