在实现和调用时可以复制函数参数名称吗?

Is it okay to duplicate function argument name when in implementation and in calling?

本文关键字:参数 函数 复制 实现 调用      更新时间:2023-10-16

如果我有

#include <iostream>
int fun(int,int);
int main(void)
{
int foo=3;
int bar=5;
std::cout << fun(foo,bar);
}
int fun(int foo, int bar){ return foo+bar; }

对于foobar的冲突名称,一个在函数定义中,一个在主程序主体中,是否会(可能(混淆(由人类或编译器!(? 到目前为止,我发现结果都是正确的,但最好知道最佳实践。 事实上,我经常耗尽想象力,并将这两个事件(如示例中所示(命名为相同。

(多年来我一直在想这个问题;这太基本了,我相信在SO的漫长历史中一定有人问过,但现在我找不到了。如果重复,请务必告诉我。

对于编译器来说,每个变量都与语言标准定义的范围相关联,那么就不能存在任何误解的情况。如果在编译器无法确定变量的作用域的情况下,则会引发不明确的编译错误。

示例:名称相同,但范围不同。

int x = 10;
void func() {
// the definition of local x below hides global x in current scope
int x = x; // local x is assigned value of global x
x = 5; // local x is assigned 5, this does not affect global x
printf("local x = %dn", x);
}
int main() {
func();
printf("global x = %dn", x);
return 0;
}

若要了解编译器如何处理具有相同名称但作用域不同的变量,请阅读 C 编译器如何区分同名的局部变量和全局变量?

对人类来说,这被称为命名约定。您可以自由使用任何有效名称来命名变量,但建议您遵循一些一致的规则 - 这将使您的代码更具可读性和可维护性。