C で変数を宣言するとき、型を省略できる場合がありますint
。
K&R スタイルで宣言されていない限り、パラメーターの明示的な 'int' 型を省略すると、他の非 int パラメーターを使用して gcc でコンパイルできないのはなぜですか?
このコードはエラーを生成します:
main(argc, char *argv[])
{
/* . . . */
}
次の出力を使用します。
$gcc XXX.c -oXXX
XXX.c:X:X: error: expected ‘)’ before ‘char’
main(argc, char *argv[])
^
ただし、パラメーターに K&R スタイルの型を記述した場合int
、最初のパラメーターの型の指定を省略できます。
main(argc, argv)
char *argv[];
{
/* . . . */
}
そして、それはうまくコンパイルされます。
その理由は、最初の C 標準を作成したときに、K&R 自動 int 表記を関数パラメーターの新しい構文から完全に分離する必要があると判断したためだと思われます。特に、標準がまとめられるまでに自動 int 表記はおそらくすでに貧弱な表記と見なされています。
これらの規則に対する私の関心は学術的なものであり、通常、この古いスタイルの C を書くことはありません。