什么是这个C++警告 - 控制到达非void函数的结尾

vcx*_*178 0 c++

我正在写这个函数定义.

#include<iostream>

int abs_fun(int x);

int main()
{
    int i =abs_fun(0);
    std::cout<<i;
    return 0;
}

int abs_fun(int x)
{
    if (x<0)
        return -x;
    else if(x>=0) //warning
        return x;
}
Run Code Online (Sandbox Code Playgroud)

我正在编译代码g++ -Wall -Wconversion -Wextra p4.cpp -o p4并在结束时收到警告abs_fun()因为warning: control reaches end of non-void function [-Wreturn-type] }如果我只是写else而不是else if,那么警告就会消失.有什么建议警告出现?

Hol*_*Cat 5

因为编译器不够智能(或者只是不费心去尝试)才能理解其中一个returns总是到达.

  • 请注意,大多数流行的编译器可能足够聪明,可以检测到这一点,并且可能在优化过程中这样做.但是,该标准并不要求他们在生成此诊断时将这些信息考虑在内,因此大部分都不会. (3认同)