在实现和调用时可以复制函数参数名称吗?
Is it okay to duplicate function argument name when in implementation and in calling?
如果我有
#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; }
对于foo
和bar
的冲突名称,一个在函数定义中,一个在主程序主体中,是否会(可能(混淆(由人类或编译器!(? 到目前为止,我发现结果都是正确的,但最好知道最佳实践。 事实上,我经常耗尽想象力,并将这两个事件(如示例中所示(命名为相同。
(多年来我一直在想这个问题;这太基本了,我相信在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 编译器如何区分同名的局部变量和全局变量?
对人类来说,这被称为命名约定。您可以自由使用任何有效名称来命名变量,但建议您遵循一些一致的规则 - 这将使您的代码更具可读性和可维护性。
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类