main の署名は次のとおりです。
int main(int argc, char **argv);
しかし、このような main も機能する理由が本当にわかりません:
main(a){}
「あ」はここで何をしているの?コンパイラがエラーを表示しないのはなぜですか?? 使用する前に「a」を宣言していないためです。
これは、"implicit int" と呼ばれる古い C コードの機能です。タイプが指定されていない変数は、 と見なされますint
。同様に、戻り値の型が指定されていない関数は、 を返すと見なされますint
。現在は非推奨と見なされていますが、難読化されたコードやコード ゴルフで役立ちます。
だからあなたはそれを次のように読むべきです
int main(int a) {}
s は暗黙的でint
あるため省略されています。
WhozCraig が言及しているように、標準の観点からは、これは準拠しておらず、移植性もありません。しかし実際には、標準準拠モードでない場合、多くのコンパイラでこれを回避できます。
ただし、暗黙的int
な動作によって、変数を宣言する必要がなくなるわけではありません。
main(a){
b,c; // int declarations
c = 5;
b = c + 10;
d = b; // No! d is not declared for you, even with implicit int happening.
return 0;
}