web-dev-qa-db-ja.com

「int main(void)」?それはどのように機能しますか?

最近、小さなCテストプログラムを入力する必要があり、その過程で、誤ってvooidの代わりにvoidを使用して、main関数にスペルミスを犯しました。

それでもまだ機能しました。

それを最小の完全なバージョンに減らして、私は次のようになりました:

int main (vooid) {
    return 42;
}

これは確かにコンパイル(gcc -Wall -o myprog myprog.c)実行すると、42を返します。

この有効なコードはどのくらい正確ですか?


bashシェルから切り取って貼り付けた筆記録は次のとおりです。

pax$ cat qq.c
int main (vooid) {
    return 42;
}

pax$ rm qq ; gcc -Wall -o qq qq.c ; ./qq

pax$ echo $?
42
134
paxdiablo

それは単に「古いスタイルの」関数宣言構文を使用しています。あなたは暗黙的にintと呼ばれるvooidパラメータを宣言しています。

219

Myprog.cには以下が含まれているため、これは有効なコードです。

int main (vooid) // vooid is of type int, allowed, and an alias for argc
{     
  return 42; // The answer to the Ultimate Question
} 

vooidには、1と渡された引数の数が含まれます(つまり、argc)。つまり、実際に行ったのは、argcの名前をvooidに変更することだけです。

69

Cでは、関数の引数のデフォルトの型はintです。したがって、プログラムはWord vooidを完全に有効なコードであるint main(int vooid)として扱います。

23
Chinmay Kanchi

_gcc -std=c89 -Wall -o qq qq.c_のみであり、_gcc -std=gnu89 -Wall -o qq qq.c_は警告を発行しません。他のすべての標準は、intの暗黙の型vooidに関する警告を発します。

int main(chart)は、int main (vooid)と同じように動作します。

_return vooid;_は、コマンドライン引数の数を返します。

Debianテストシステムでgcc 4.4.5を使用してテストしました。

20
vpit3833