我得到了一段代码:
int check(int d, char arr[9][9], int rep_arr[45][3]) {
int p = findProb(d, arr, rep_arr, 0) ;
if (isIdeal(d, arr) == 1) {
print_array(d,arr) ;
return 1 ;
}
else if(isIdeal(d,arr) == 0 && p == 0){
printf("Fail\n") ;
return 0 ;
}
else if (isIdeal(d, arr) == 0 && p != 0) {
#do something recursively..
}
其中isIdeal(d, arr)
只能等于0
或1
,p
可以等于0
或其他整数。
但是,编译器给出了标题中给出的错误。
后来我在那段代码的末尾添加了return 0
。
现在它可以工作,但是没有以功能方式工作,因为函数返回的内容非常重要。
另一个重要的事情是,当我添加else
块以避免在该网站see more at link上的其他主题上显示的失败时,它永远不会输入else
块。但它总是{{ 1}}我是否添加return 0
块,通过哪种方式,所有可能性都以else
行结束。怎么样?
答案 0 :(得分:3)
如果您确定可能的值,那么您可以用以下内容替换整个函数:
int foo(int case1, int case2) {
if (case1 == 1) {
return val;
}
return case2 == 0 ? val2 : val3;
}
同时使你的警告沉默。
如果您关注case1
可能不是1
或0
,那么只需更改为:
int foo(int case1, int case2) {
assert(case1 == 0 || case1 == 1);
if (case1 == 1) {
return val;
}
return case2 == 0 ? val2 : val3;
}
答案 1 :(得分:0)
编译器不知道case1
和case2
参数的值是什么。您的if
条件不处理这些参数可能包含的所有可能值(忽略您可能只传入1和0)。因此,编译器会正确地警告您,您可以在不返回任何内容的情况下到达函数的末尾。
如果您确实不应该发生这种情况,请将其转换为运行时错误并在函数结束时放置一个断言(您可能仍需要在断言后返回以使警告静音,我不确定)。
int foo(case1, case2) {
// your if conditions here
assert(0);
return 0;
}