【发布时间】:2013-08-25 16:28:15
【问题描述】:
在 C 中声明变量时,如果您想声明 int,有时可以省略类型。
除非在 K&R 样式中声明,否则为什么在 gcc 中省略显式 'int' 类型的参数无法与其他非 int 参数一起编译?
此代码生成错误:
main(argc, char *argv[])
{
/* . . . */
}
输出如下:
$gcc XXX.c -oXXX
XXX.c:X:X: error: expected ‘)’ before ‘char’
main(argc, char *argv[])
^
但是,如果我为参数编写 K&R 样式类型,我可以省略为第一个参数指定 int 类型:
main(argc, argv)
char *argv[];
{
/* . . . */
}
编译得很好。
我怀疑原因是在制定第一个 C 标准时,他们决定 K&R 自动 int 表示法应该与新的函数参数语法完全分开,特别是因为当标准被整合到一起时,自动- int 表示法可能已经被认为是糟糕的表示法。
我对这些规则的兴趣是学术性的,我一般不会写这种老式的 C。
【问题讨论】:
-
因为你不应该那样做。