主要论点?

时间:2013-04-20 05:05:27

标签: c arguments main

我知道main的签名是:

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

但我真的不知道为什么像这样的主人也会这样做:

main(a){}

这里有什么'做'?为什么编译器不显示错误?因为在使用它之前我没有声明'a'。

1 个答案:

答案 0 :(得分:5)

这是旧C代码的一个特性,称为“隐式int”。任何未指定类型的变量都假定为int。同样,假定未指定返回类型的任何函数返回int。它现在被视为已弃用,但在混淆代码和code golf中变得有用。

所以你应该把它读成

int main(int a) {}

其中省略了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;
}