警告:(343)在非void函数末尾隐式返回



当函数返回指针标记时,我收到了以上警告。以下代码不完整,请缩短以避免混淆。

char *ServerResponds()        
{
char copy_wifi_data[EUSART_BUFFER_SIZE];                               
uint16_t i = 0; int tok_count = 0;            
static char *token;
token = strtok(copy_wifi_data, ":");               //Converting wifi data to tokens.
while(token != NULL)
{  
if(tok_count == 1)
{
return token;
}
token = strtok(NULL,":");  
tok_count++;
} 
}

发生警告是因为在tok_count == 1为false的情况下没有返回语句。

char *ServerResponds()        
{
char copy_wifi_data[EUSART_BUFFER_SIZE];                               
uint16_t i = 0; int tok_count = 0;            
static char *token;
token = strtok(copy_wifi_data, ":");               
while(token != NULL)
{  
if(tok_count == 1)
{
return token;
}
token = strtok(NULL,":");  
tok_count++;
} 
/* <--- there is no return if control flow reaches this point */
}

您可以在函数末尾添加一个return 0;来解决此问题,但您必须记录此行为,并确保调用方已准备好处理null返回值。

函数不会通过所有可能的执行路径返回值。

虽然您可以在While循环之后传递return NULLreturn token,但从单个函数中获得多个返回点可能被认为是不好的做法——这与许多常见的编码标准相反,在大多数情况下也是不明智的。

//Converting wifi data to tokens.
static char *token  = strtok(copy_wifi_data, ":");               
while( tok_count == 0; token != NULL )
{  
token = strtok(NULL,":");  
tok_count++;
}
return token ; 

也就是说,目前尚不清楚while循环的目的是什么,也不清楚为什么tokenstatic。它在语义上与:相同

//Converting wifi data to tokens.
char *token = strtok(copy_wifi_data, ":");               
if( token != NULL )
{  
token = strtok(NULL,":");  
}
return token ; 

相关内容

  • 没有找到相关文章

最新更新