主要论点?

eli*_*inx 3 c program-entry-point arguments

我知道主要的签名是:

int main(int argc, char **argv);
Run Code Online (Sandbox Code Playgroud)

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

main(a){}
Run Code Online (Sandbox Code Playgroud)

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

lus*_*oog 5

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

所以你应该把它读作

int main(int a) {}
Run Code Online (Sandbox Code Playgroud)

其中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;
}
Run Code Online (Sandbox Code Playgroud)