当函数返回指针标记时,我收到了以上警告。以下代码不完整,请缩短以避免混淆。
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 NULL
或return 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循环的目的是什么,也不清楚为什么token
是static
。它在语义上与:相同
//Converting wifi data to tokens.
char *token = strtok(copy_wifi_data, ":");
if( token != NULL )
{
token = strtok(NULL,":");
}
return token ;