最近、小さな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
それは単に「古いスタイルの」関数宣言構文を使用しています。あなたは暗黙的にint
と呼ばれるvooid
パラメータを宣言しています。
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
に変更することだけです。
Cでは、関数の引数のデフォルトの型はint
です。したがって、プログラムはWord vooid
を完全に有効なコードであるint main(int vooid)
として扱います。
_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を使用してテストしました。