在学习 《Unix编程环境》(1983年)一书中的一些示例时,我读到了一些对我来说很奇怪的C代码。
作为一个好奇心,我想更多地了解这种“风格”。这里感兴趣的点是 int main(argc, argv)
下面的那一行。
#include <stdio.h>
int main(argc, argv)
char *argv[];
{
printf("%s\n", argv[0]);
return 0;
}
在我的调查中,我发现使用
-Wall -pedantic -ansi
这些标志编译上述代码时没有任何警告,并且将-ansi
替换为更近期的-std=c99
(或者使用gcc
和cc
的c11
)只会警告argc
默认为int
。我研究了旧的C89标准,试图找到关于这种特定写法的参考资料,但是自己没有找到任何内容,所以我转而求助于更广泛的知识群体。
因此,问题来了:这种神秘的写法从什么时候开始,可能为什么仍然被允许(遗留原因?)