我知道main的签名是:
int main(int argc, char **argv);
但我真的不知道为什么像这样的主人也会这样做:
main(a){}
这里有什么'做'?为什么编译器不显示错误?因为在使用它之前我没有声明'a'。
答案 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;
}