这是一个非常简单的问题。
说我有一个功能:
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的情况,没有返回值。如何解决这个问题?
答案 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;
}