3

我知道 main 的签名是:

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

但我真的不知道为什么这样的 main 也会起作用:

main(a){}

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

4

1 回答 1

5

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

所以你应该把它读成

int main(int a) {}

其中ints 已被省略,因为它们是隐式的。

正如 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 回答