2016-12-21 6 views
-1

の終わりに達した私は、このコードとコンパイラを持っているが、私に次のエラーを与える:コンパイラエラー:コントロールが非void型関数

functions.c:12:1: warning: control reaches end of non-void function [-Wreturn-type] }

コード:

#include <stdlib.h> 
#include <time.h> 

int myrand(){ 

    srand(time(NULL)); 
    int r = rand()%2; 

} 

この関数は、別のから呼び出されます。ここにファイル:

printf("%d here \n", myrand()); 
+0

'int myrand(){...}'は 'int'を返す関数です。コンパイラは、 'return';おそらく –

+0

のような' return'文を期待しています。この関数は 'int'値を返さなければなりません。 –

+0

おめでとうございます。これらの開示に同意する質問がありましたか? –

答えて

0

return文を追加します。それがなければ

int myrand(){ 

    srand(time(NULL)); 
    int r = rand()%2; 
    return r; 
} 

、あなたは印刷する「ランダム」値がrand()から、しかし、return文を省略している未定義の動作から来ていません。 [まあ、アーキテクチャによっては、randの戻り値がレジスタに伝播する可能性があります。

標準では、ハードエラーを要求せずに省略することができますが、これはまだ不適切です。

+0

ありがとう、私はこのエラーをちょうど見た) – yari

0

多くの研究とマニュアルの読み込み後にエラーが検出されたが、制御が空でない機能の終了に達することが分かった。

int myrand(){ 

    srand(time(NULL)); 
    int r = rand()%2; 
    return r; // add this 
} 
+0

ありがとう、ちょうどこれを見た) – yari

関連する問題