main函数的参数?

3

我知道main函数的签名是:

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

但我真的不知道为什么像这样的主要功能也能正常工作:

main(a){}

这里为什么能出现 'a'?为什么编译器没有报错?因为在使用 'a' 之前,我没有声明它。

1个回答

5

这是旧版 C 代码的一个特性,称为“隐式 int”。任何未指定类型的变量都被假定为 int 类型。同样地,任何未指定返回类型的函数都被假定为返回 int 类型。虽然现在已经被视为不推荐使用,但在混淆代码和代码高尔夫中仍然有用。

因此,您应该将其读作

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;
}

对分析的肯定。它被接受为有效的 main() 是一个实现定义的问题。它不符合 C99 §5.1.2.2.1 中规定的两个必需允许项,即 int main(void)int main(int argc, char *argv[])。标准中列出的第三个选项,“或以其他一些实现定义的方式。”因此是唯一可允许的替代方案。 - WhozCraig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接