2017-03-16 10 views
-1

私の教科書には、main関数の実行可能部分に少なくとも1つのステートメントが必要です。ステートメント: "実行可能な部分にmain関数内に少なくとも1つのステートメントが必要です。"

1)

#include <stdio.h> 
void main(){ int c; } 

2)

#include <stdio.h> 
void main(){ int c; c=0; } 

上記2つのコードは、ランタイムエラーが発生します。

3)

#include <stdio.h> 
void main(){ 
int c; c=5; printf("%d",c); } 

上記のコードは正常に実行されます。考えられる理由は何ですか?

+1

_上記2つのコードは実行時エラーになります。 'void main()' ---> 'int main(void)' – LPs

+2

'int c;'はステートメントではありません。それは定義です。しかし、 'void main()'はホストされた環境では無効な署名です。 @LPsのアドバイスに従ってください:その本を取り除くと、ナンセンスになります。 – Olaf

+1

実行時エラーはありますか? –

答えて

3

まず、

       プログラムの起動時に呼び出される関数が mainと命名されています。実装では、この関数のプロトタイプは と宣言していません。任意の名前が を使用してもよい彼らは関数に対してローカルであるとして、

int main(void) { /* ... */ }
または二つのパラメータ( argcargvとしてここでいう、と:それは、 intの戻り値の型をなし パラメータで定義されなければなりません彼らは宣言されている):

int main(int argc, char *argv[]) { /* ... */ }

または同等のもの; 10)または他の実装で定義された方法で実行されます。

C 2011 Online Draft、§ 5.1.2.2.1プログラムの起動

コンパイラのドキュメントには、特に有効な署名としてそれをリストしていない限り、あなたのランタイムエラーがどこにあるかもしれ未定義の動作void main()リードを使用してから来る。

第2に、現在のC標準では、mainに実行可能ステートメントが含まれている必要はありません。