2012-01-18 8 views
-2

は、誰かが関数の最後にその「リターン」であるものを私にexlainすることができますし、我々が持っている理由の主関数の戻り0.egの最後に書くこと関数 "return"の最後に何を書いていますか? C++では

int main() 
{ 
    ..... 
    return 0; 
} 
+0

あなたは正しい関数から何かを要求していますか?だから、あなたは 'return'を持つ必要があります。関数から何も期待していない場合は、単に 'void main(){.... //リターンコールを必要としない}'と宣言してください。 –

+3

@ sh4nx0r:いいえ、*は無効です*。 'main'は' int'を返さなければなりません。そして、いずれにしても、「メイン」はあなたが本当に何も返す必要がないという点で特別です。 –

答えて

6

をしませんあなたをC++でmainの末尾にreturnと書かなければなりません。戻り値は0です。

これは、プログラムが成功したか(ゼロ)、何らかのエラーが発生したかどうかを知ることができるように、プログラム環境に値を返します。 (非ゼロ)。シェルスクリプト/バッチファイルを含む他のプログラムは、この情報を使用して決定を下すことができます。実行しているプログラムでエラーが発生すると、早期に停止することができます。

0

関数呼び出しをサポートするすべてのCPUは、呼び出された関数の内部から関数を呼び出したコードに明示的に戻るために、RETのような命令を持っています。関数呼び出しの後に戻るコードのメモリアドレスは、「よく知っている場所」(例えばスタック)に既に保存されています。 RET命令は、元の関数呼び出しの後に来るコードで実行を再開するために、そのメモリアドレスを取り出し、CPUを正しい場所に向けます。

C++では、特定の値を返すように宣言されている関数(上記の関数mainのように)がありますが、他の関数は決して返されません(戻り値の型がvoidと宣言されています)。あなたが書いた関数をどのように宣言するかはあなたの選択です。関数の戻り値の型がvoidの場合、ではないは、の明示的なreturn文が必要です。 if、elseまたはloopの内部からのように早めに返っていない限り。例えば:あなたの関数は、(例えば、int型用)void以外の戻り値の型を持つように宣言されている場合

void foo(int x) { 
    if (x == 0) 
     return; // premature return to caller 

    int b = x*2; 
    // do some more stuff 
    // and now no need to say return, its done implicitly because we are at function end 
} 

しかし、その後、あなたが戻ってないていても、関数内の明示的なreturn文を持つべきです時期尚早。

int bar(int y) {   
    return y*7; 
} 

呼び出し側はそれを期待しているし、このような変数に戻り値を割り当てることもできるので:

int z = bar(4); 
関連する問題