0

これは本当に簡単な質問です。

関数があるとします:

 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 の場合、戻り値はありません。これはどのように修正できますか?

4

6 に答える 6

6

「制御が非 void 関数の終わりに達した」またはそれらの行に沿った何かに関する警告を押しつぶそうとするだけの場合は、fail()返されないことを示すコンパイラ固有のディレクティブで飾ることができます。GCC と 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
$
于 2013-09-06T04:27:35.603 に答える
5
int fun (int n)
{
    if (n <= 3) { fail(); /* Does not return. */ }
    return n;
}
于 2013-09-06T04:26:41.927 に答える
1

考えられるイディオムの 1 つはfail、int を返すように定義してから、次のように書くことです。

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

}
于 2013-09-06T04:30:07.467 に答える
-1

Aestheteの答えに基づいて構築:

int fun (int n)
{
    if (n <= 3) { fail(); return -1; } //-1 to indicate failure
    return n;
}
于 2013-09-06T04:28:15.143 に答える