为什么我们不能在函数参数列表中将相同数据类型的参数组合在一起?
Why can't we group together same dataype arguments in function parameter list?
我想知道为什么我们不能在函数参数列表中将相同数据类型的变量组合在一起???
即
为什么不能是这个原型:
int func (int a, int b, int c, const char ch1, const char ch2);
这样写:
int func (int a, b, c, const char ch1, ch2);
???
这会节省时间 space 两者,恕我直言。
A molbdnilo 在评论中说,编译器需要能够区分类型名称和参数名称。 Type [ArgName] {, Type ArgName }
的语法允许编译器首先查找类型说明符和可选参数名称。如果您按照 post 描述的方式进行操作,编译器就没有简单的方法来确定 b
和 c
应该是类型名称还是参数名称 - 因为您可以执行以下操作:
typedef int foo;
int func(int x, int foo) { ... }
(即使这是一个坏主意),编译器不可能说 "ah, it's the name of a type, so can't be a variable name" - 只有参数名称的相对位置告诉编译器如何解释它。
请注意,对于原型,这样做是完全有效的:
int func(int, int, double, int, char);
或
int func(int x, int y, double, int z, char);
(如果此特定函数中未使用 double
和 char
参数,也可以使用此函数,但该函数是接口的一部分,这些参数始终存在,所以你需要告诉编译器它们在那里)
在设计一种语言时,确保编译器能够理解你的意思非常重要,因此拥有一种语法可能意味着两种不同的东西,这取决于某些东西"the compiler has to guess",然后它会给你带来有趣的挑战程序员知道它实际上做了什么。
我想知道为什么我们不能在函数参数列表中将相同数据类型的变量组合在一起???
即
为什么不能是这个原型:
int func (int a, int b, int c, const char ch1, const char ch2);
这样写:
int func (int a, b, c, const char ch1, ch2);
???
这会节省时间 space 两者,恕我直言。
A molbdnilo 在评论中说,编译器需要能够区分类型名称和参数名称。 Type [ArgName] {, Type ArgName }
的语法允许编译器首先查找类型说明符和可选参数名称。如果您按照 post 描述的方式进行操作,编译器就没有简单的方法来确定 b
和 c
应该是类型名称还是参数名称 - 因为您可以执行以下操作:
typedef int foo;
int func(int x, int foo) { ... }
(即使这是一个坏主意),编译器不可能说 "ah, it's the name of a type, so can't be a variable name" - 只有参数名称的相对位置告诉编译器如何解释它。
请注意,对于原型,这样做是完全有效的:
int func(int, int, double, int, char);
或
int func(int x, int y, double, int z, char);
(如果此特定函数中未使用 double
和 char
参数,也可以使用此函数,但该函数是接口的一部分,这些参数始终存在,所以你需要告诉编译器它们在那里)
在设计一种语言时,确保编译器能够理解你的意思非常重要,因此拥有一种语法可能意味着两种不同的东西,这取决于某些东西"the compiler has to guess",然后它会给你带来有趣的挑战程序员知道它实际上做了什么。