我有一段代码:
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
block 以避免该网站上另一个主题 see more at link 指示的失败时,它从未进入那个 else
block 。但是,无论我是否添加 else
block ,它总是 return 0
,这样所有的可能性就结束了加上一个 return
行。怎么办?
最佳答案
如果您确定可能的值,那么您可以将整个函数替换为:
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;
}
关于c - 警告 : control reaches end of non-void function [-Wreturn-type],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36757415/