2011-01-05 10 views
1

を動作しません:は、私は、次のCプログラム(それを取得として簡単なように)持って

#include <stdio.h> 

main() 
{ 
printf("Test"); 
} 

しかし、Cygwinの内のgccコンパイラを使用して、私が作るない限り、私はこのプログラムを動作させることはできません以下の変更点があります。

#include <stdio.h> 

int main() 
{ 
    printf("Test"); 
    return 0; 
} 

誰でも説明できますか? "int"と "return 0;について特別なものは何ですか? ?

ありがとうございます! Amit

+0

GCCのバージョンは何ですか? 'main'の' return 0'をC言語ではなくC言語では間違っていますが、戻り値の型を省略するとデフォルトで 'int'になります。あなたの最初のコードはMinGW GCC 4.5で '-ansi'、' -std = c90'、 '-std = c99'モードで正常にコンパイルされます。 – Kos

+0

@Kos:「(C++とは対照的に)」とはどういう意味ですか? –

+0

C++では、 'main()'で 'return 0;'を "合法的に"省略することができます。IIRC - 標準認識コンパイラは 'return 0;'があるかのように動作させる必要があります。それは重要ではありません... – Kos

答えて

2

Cでは、出力タイプを常に指定する必要があります。したがって、intが常に必要です(一部のコンパイラではvoidも機能します)。

「ノーマル」、最小限のバージョンはこれです:

int main(int argc, char **argv){ 
    return 0; 
} 

お使いのシステムに応じて、あなたもaswellそこchar **envpchar **appleを持つことができます。

http://en.wikipedia.org/wiki/Main_function_(programming)#C_and_C.2B.2B

+0

あなたがminimalと言うなら、あなたは 'argc'と' argv'引数 ';' 'は必要ありません。 – rubenvb

+1

また、 'void'はCまたはC++標準で許可された戻り型ではありません。 – Kos

+0

@rubenvb:私は標準に関して話していました。その場合、 'argc'と' argv'が必要です。 – Wolph

1

intは、C規格ごとにmainの必須返品タイプです。

+1

'return 0;'は、 'main'関数を終了する' 'に到達する' '... 'が値0を返すので、' 'main''が不特定の値を返すのを防ぎません。 (ISO/IEC 9899:1999 5.1.2.2.3) –

+0

@Charles、私はそれを知らなかった。私の答えを更新しました。 C++で同じことが起こるのでしょうか? –

+0

はい、C++で "制御が' return'文に遭遇することなく 'main'の終わりに達すると、' return 0; 'が実行されます。(ISO/IEC 14882:2003 3.6.1 [basic.start。 main]/5) –

0

intがリターンコードです。私はCが0を返すようにデフォルト設定していると信じています。一般的に0の返り値はプログラムの正常終了を意味し、1,2,3 ...はエラーコードです。これは、プログラムが正常に実行されたかどうかをテストするプログラムでよく使用されます。

0

intは、関数の戻り値の型です。この場合はmain()です。ご存知のように、C言語の関数の戻り値の型を指定する必要があります(それはvoidとなります。何も返す必要はありません)。

関数に戻り値の型(たとえば、int)がある場合、戻り文(たとえば、return 0;)を置く必要があります。 Cでは、関数が正しく実行されたときに0を返す「標準」です。また、プログラムを実行すると、実行後に返される値を取得できます(この場合は0になります)。プログラムの実行が誤って終了した場合は、他の値(-1,1,2など)を返すことができます。エラーを検出してデバッグする方が簡単です。

関連する問題