if语句中的c ++返回值

时间:2013-09-06 04:23:09

标签: c++

这是一个非常简单的问题。

说我有一个功能:

 int fun(int n){
     if (n > 3)
         return n;
     else
         fail(); // this function outputs error message 
                 // and terminates the program
                 // no return value
 }

然后,对于n <= 3的情况,没有返回值。如何解决这个问题?

6 个答案:

答案 0 :(得分:5)

int fun (int n)
{
    if (n <= 3) { fail(); /* Does not return. */ }
    return n;
}

答案 1 :(得分:5)

如果您只是试图压制关于“控制到达无效函数的结尾”的警告或沿着这些行的某些内容,您可以使用一些特定于编译器的指令来装饰fail(),这些指令表明它没有返回。在GCC&amp; Clang,例如__attribute__((noreturn))

示例:

$ cat example.cpp 
void fail(void);

int fun(int n)
{
  if (n > 3)
    return n;
  else
    fail();
}
$ clang++ -c example.cpp 
example.cpp:9:1: warning: control may reach end of non-void function
      [-Wreturn-type]
}
^
1 warning generated.
$ cat example2.cpp 
void fail(void) __attribute__((noreturn));

int fun(int n)
{
  if (n > 3)
    return n;
  else
    fail();
}
$ clang++ -c example2.cpp
$

答案 2 :(得分:1)

一种可能的习惯是将fail定义为返回一个int,然后写:

int fun(int n){
    if (n > 3)
        return n;
    else
        return fail();                            

}

答案 3 :(得分:0)

您可以声明一个错误代码,表明该功能出现了问题。

例如:

const int error_code = -1;

int fun (int n) {

    if (n > 3) 
        return n;

    fail();
    return error_code;

}

答案 4 :(得分:0)

另一种巧妙的方法是使用boost::optional作为返回值。这表示在失败的情况下很多时候没有设置返回值,调用者可以进一步检查这一点,以便采取后续行动。

答案 5 :(得分:-1)

以Esthete的回答为基础:

int fun (int n)
{
    if (n <= 3) { fail(); return -1; } //-1 to indicate failure
    return n;
}