c - 警告 : control reaches end of non-void function [-Wreturn-type]

标签 c function return void

我有一段代码:

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) 只能等于 01 并且 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 可能不是 10,那么只需更改为:

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/

相关文章:

c - 如何使用标准用户捕获 TCP/IP 数据包

python - scipy.weave.inline 的语法错误

JavaScript:连续调用对象上的函数列表

java - return 在循环中到底做了什么?

c - 'variable' 的存储大小未知

javascript - 如何在 javascript-vuejs 中将两个函数的总和放入数组中

c++ - 将成员函数作为参数传递给其他成员函数 (C++ 11 <function>)

jquery - 表单 OnSubmit 等待 jQuery Ajax 返回?

python - 这个 "and"语句实际上在返回中做了什么?

c - clang 是独立的 C 编译器还是需要 gcc?