提问人:iocode 提问时间:1/5/2023 最后编辑:iocode 更新时间:1/8/2023 访问量:90
为什么不能将隐式类型函数参数与显式类型化函数参数一起使用?
Why is it not possible to use implicitly typed function arguments with explicitly typed function arguments?
问:
如果我要编译以下代码:
// x is implicitly typed as int
void foo(x, char y) {
return;
}
会发生语法错误(),但我不确定为什么这种语法无效。expected identifier
然而:
void foo(int x, char y) {
return;
}
编译成功。
那么为什么这个语法无效呢? 我不是 C 语言专家,所以我不确定这是否是一个愚蠢的问题。
答:
5赞
dbush
1/5/2023
#1
隐式参数类型,或者更准确地说是带有标识符列表的函数定义,是 C 语言原始 K&R 设计的一部分。在那些日子里,你可以有这样的定义:
int foo(x, y)
{
return 0;
}
在这种情况下,所有参数都默认为 type ,或正文前的一组声明:int
int foo(x, y)
int x;
char *y;
{
return 0;
}
指定参数的类型。在这两种情况下,调用方都不知道参数的类型。
直接在定义中指定类型后来被添加到语言中,这也增加了在声明中指定函数参数类型的功能,允许调用者知道参数的类型。
因此,没有太多理由将两者混合在一起,因为一个是为了改进另一个。
评论
1赞
iocode
1/5/2023
因此,隐式类型只是一个古老的功能,从那时起就一直保留在语言中,就像关键字一样auto
0赞
chux - Reinstate Monica
1/5/2023
@nameless_user 考虑一下 C 开发时,内存需要花费几个字节。使用了今天没有立足之地的捷径。
0赞
SafelyFast
1/5/2023
@nameless_user C 没有 auto 关键字。
0赞
dbush
1/5/2023
@SafelyFast 实际上确实如此,尽管它只能应用于局部变量,因此是多余的。
0赞
SafelyFast
1/5/2023
哇,我学到了一些新东西。谢谢。下次我会在发表这样的评论之前进行研究!
评论