2011-10-21 61 views
3

プロトタイプがmain()で宣言されている関数の戻りデータ型は無効です。 命令の復帰を保証します。返品は何ですか?平均?

main() 
{ 
    void create(int *p); 
    *some code* 
} 
void create(node *list) 
{ 
    *some code* 
    return; 
} 

何が返されますか?返されるのは何ですか?

+7

機能の多くを私の会社のコードベースにvoid型関数の最後の行に「戻る」があります。私は「ユーザーに機能を終了させることを伝える」と言われました。あたかも機能の終わりに達していないかのように? – corsiKa

+0

これは、任意の整数を返すことは、ハット整数の値を無視して関数を終了するようなものであることを意味しますか? –

+0

@glowcoder:もっと興味深いことに、あなたの同僚は、ユーザーのことを認めるようです(他の開発者、私は推測します)。 –

答えて

8

これは何も返されません。void関数内でreturn文を使用して、フローを変更して関数から終了することがあります。すなわちいうより:

void do_something(int i) 
{ 
    if (i > 1) { 
     /* do something */ 
    } 
    /* otherwise do nothing */ 
} 

あなたが持っているかもしれません:

void do_something(int i) 
{ 
    if (i <= 1) 
     return; 

    /* if haven't returned, do something */ 
} 
2

return;は、宣言されたvoid戻り値の型のcreateと一致するものを返しません。 return EXPRESSION;と同じように、表示されている関数の呼び出し元に戻ります(例には表示されていません)。それはcreateの非常に最後に表示されるので、このコードの特定の部分で

return;は冗長ですが、途中で機能を終了したいときには便利です:

void print_error(char const *errmsg) 
{ 
    if (errmsg == NULL) 
     // nothing to print 
     return; 
    perror(errmsg); 
} 
1

それが実行中の関数から返されますvoidの戻り値(値がないことを意味します)。

3

この場合、あまり意味はありません。

return; voidを返すこの関数から突然終了することを意味します。

int a() 
{ 
    return 10; 
} 

void b() 
{ 
    return; // we have nothing to return, this is a void function. 
} 

void c() 
{ 
    // we don't need return; it is optional. 
} 

return; void関数は有用ではないため、省略することができ、オプションです。 ただし、ループやスイッチを終了するなどの場合に便利です。

void xxx() 
{ 
    int i = 0; 
    while (1) 
    { 
     if (++i >= 100) 
      return; // we exit from the function when we get 100. 
    } 
} 
関連する問題