我知道 main 的签名是:
int main(int argc, char **argv);
但我真的不知道为什么这样的 main 也会起作用:
main(a){}
'a' 在这里做什么?为什么编译器不显示错误?因为我在使用它之前没有声明'a'。
这是旧 C 代码的一个特性,称为“隐式 int”。任何未指定类型的变量都被假定为int
. 类似地,任何未指定返回类型的函数都假定返回一个int
. 它现在被认为已弃用,但在混淆代码和代码高尔夫中变得有用。
所以你应该把它读成
int main(int a) {}
其中int
s 已被省略,因为它们是隐式的。
正如 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;
}