error: control may reach end of non-void function
error: control may reach end of non-void function
请有人可以解释我为什么会收到此错误:
error: control may reach end of non-void function
我正在尝试创建一个函数 linearsearch()
接受一个键和一个 table 返回元素的索引(如果找到)。
这令人困惑;我是初学者,正在上 CS50 在线课程;我以前从来没有遇到过这个错误。
#include <stdio.h>
#include <string.h>
#include <cs50.h>
int linearsearch(int key, int array[]);
int main(int argc , string argv[])
{
int key = 0;
int table[]={2,4,5,1,3};
printf("%i is found in index %i\n",key,linearsearch(1,table));
}
int linearsearch(int key, int array[])
{
for(int i = 0;i<5;i++){
if(array[i] == key)
{
return i;
}
else{
return -1;
}
}
}
在最后一个 for 循环中,你 return 从函数中获取了一些东西,所以应该没有任何问题(除了你的算法是错误的:它不应该 return 如果找不到则立即)。
问题是:无论数据是什么,编译器不一定会看到您 returning。它只是看到不要通过 returning 某些东西来结束你的例程。
大多数编译器可以找出简单的情况,例如:
if (x) return 0; else return 1;
// not returning anything in the main branch but ok as it's seen as unreachable
}
但在您的情况下,您有一个 for
循环包装 return 指令。编译器不是控制流分析器。他们做基本的事情,但肯定不是正式的执行。因此,有时他们会在您认为 "OK" 的地方发出警告。
总之,您的算法如前所述是不正确的。仅在循环结束但未找到任何内容时通过 returning -1 修复它。
在这种情况下,您修复了错误和警告。所以你看到警告正确地检测到你的代码中有可疑的东西。
固定码:
for (int i = 0; i < 5; i++)
{
if (array[i] == key)
{
// found return & exit loop
return i;
}
}
// not found, end of loop: return -1
return -1;
请有人可以解释我为什么会收到此错误:
error: control may reach end of non-void function
我正在尝试创建一个函数 linearsearch()
接受一个键和一个 table 返回元素的索引(如果找到)。
这令人困惑;我是初学者,正在上 CS50 在线课程;我以前从来没有遇到过这个错误。
#include <stdio.h>
#include <string.h>
#include <cs50.h>
int linearsearch(int key, int array[]);
int main(int argc , string argv[])
{
int key = 0;
int table[]={2,4,5,1,3};
printf("%i is found in index %i\n",key,linearsearch(1,table));
}
int linearsearch(int key, int array[])
{
for(int i = 0;i<5;i++){
if(array[i] == key)
{
return i;
}
else{
return -1;
}
}
}
在最后一个 for 循环中,你 return 从函数中获取了一些东西,所以应该没有任何问题(除了你的算法是错误的:它不应该 return 如果找不到则立即)。
问题是:无论数据是什么,编译器不一定会看到您 returning。它只是看到不要通过 returning 某些东西来结束你的例程。
大多数编译器可以找出简单的情况,例如:
if (x) return 0; else return 1;
// not returning anything in the main branch but ok as it's seen as unreachable
}
但在您的情况下,您有一个 for
循环包装 return 指令。编译器不是控制流分析器。他们做基本的事情,但肯定不是正式的执行。因此,有时他们会在您认为 "OK" 的地方发出警告。
总之,您的算法如前所述是不正确的。仅在循环结束但未找到任何内容时通过 returning -1 修复它。
在这种情况下,您修复了错误和警告。所以你看到警告正确地检测到你的代码中有可疑的东西。
固定码:
for (int i = 0; i < 5; i++)
{
if (array[i] == key)
{
// found return & exit loop
return i;
}
}
// not found, end of loop: return -1
return -1;