我想知道为什么我们不能将函数参数列表中的相同数据类型的变量组合在一起???
即
为什么不能成为这个原型:
int func (int a, int b, int c, const char ch1, const char ch2);
写得像这样:
int func (int a, b, c, const char ch1, ch2);
???
这样可以节省时间和空间,恕我直言。
答案 0 :(得分:1)
molbdnilo在评论中说,编译器需要能够区分类型名称和参数名称。 Type [ArgName] {, Type ArgName }
的语法允许编译器首先查找类型说明符和可选参数名称。如果按照帖子描述的方式进行,那么编译器没有简单的方法来确定b
和c
是否应该是类型名称或参数名称 - 并且因为您被允许做的事情如下:
typedef int foo;
int func(int x, int foo) { ... }
(即使这是一个不好的想法),编译器不可能说"啊,它是一个类型的名称,所以不可能是一个变量名称" - 只有参数名称的相对位置告诉编译器如何解释它。
请注意,对于原型,它完全有效:
int func(int, int, double, int, char);
或
int func(int x, int y, double, int z, char);
(如果在此特定函数中未使用double
和char
参数,也可以使用此函数,但该函数是接口的一部分,其中这些参数始终存在,所以你需要告诉编译器他们在那里)
在设计一种语言时,确保编译器能够理解你的意思是非常重要的,因此有一种语法可能意味着两种不同的东西取决于某些东西"编译器必须猜测&#34然后,它会给程序员带来有趣的挑战,让他们知道它实际上做了什么。