3

main の署名は次のとおりです。

int main(int argc, char **argv);

しかし、このような main も機能する理由が本当にわかりません:

main(a){}

「あ」はここで何をしているの?コンパイラがエラーを表示しないのはなぜですか?? 使用する前に「a」を宣言していないためです。

4

1 に答える 1

5

これは、"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;
}
于 2013-04-20T05:11:14.813 に答える