我知道main的签名是:
int main(int argc, char **argv);
但是我真的不知道为什么像这样的main也可以工作:
main(a){}
a在这里做什么?为什么编译器不显示错误??因为我在使用它之前没有声明'a'
这是旧C代码的一个特性,称为"隐式整型"。任何未指定类型的变量都假定为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;
}