我在C 编译器的早期源代码中发现了以下声明代码
main(argc, argv)
int argv[]; {
return 0;
}
我尝试在 ideone.com 上运行它,使用 gcc-4.7.2 以“C”模式编译它,它编译得很好,甚至运行成功
result: Success time: 0s memory: 1828 kB returned value: 0
现在我知道有一种预先标准的方式来声明函数参数:
int funct(crc, buf, len)
int crc;
register char* buf;
int len;
{
//function implementation
}
但在后一种风格中,它很清楚——首先列出参数,然后将它们声明为一种局部变量,我看到所有声明的参数和返回类型。
回到第一个代码
main(argc, argv)
int argv[]; {
return 0;
}
在之前的代码中,列出了两个参数,并且只声明了一个参数,并且看起来像argv
具有 type array of int
。
编译器如何处理它?