【问题标题】:Is it okay to duplicate function argument name when in implementation and in calling?在实现和调用时可以重复函数参数名称吗?
【发布时间】:2017-07-28 16:17:20
【问题描述】:

如果我有

#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 的悠久历史中一定有人问过,但我现在找不到任何东西。如果重复,一定要告诉我。)

【问题讨论】:

  • 当您提出这个问题时,您可能需要阅读有关范围的信息。在不同的范围内具有相同名称的变量并没有错,并且取决于编码风格(完全基于意见),它可以默认为您传递给函数的实际参数使用相同的名称,因为这些参数也在内部命名功能。
  • 那么这是一个不同的问题,因为这个问题是关于 c++ 的:P。我是python的初学者,但我不敢相信它没有范围的概念
  • @Aminopterin Python 的答案是一样的,它也有词法范围(就像过去半个世纪左右的大多数语言一样)。
  • @Aminopterin Python 中的作用域是隐式的,因为没有像 C++ 中那样的变量声明,但无论如何都有作用域的概念。例如,在绝大多数编程语言中,不同函数中的函数局部变量可以具有相同的名称,但它们仍然是不同的。
  • 我一直这样做,我认为这实际上是一种很好的做法,因为它可以帮助您跟踪数据。它还使将函数重构为更小的部分变得更加容易。

标签: c++ function scope


【解决方案1】:

对于编译器而言,每个变量都与语言标准定义的范围相关联,因此不得存在任何误解的情况。如果在编译器无法确定变量范围的情况下,则会引发模棱两可的编译错误。

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

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 = %d\n", x);
}

int main() {
  func();

  printf("global x = %d\n", x);

  return 0;
}

要了解编译器如何处理具有相同名称但范围不同的变量,请参阅How does a C compiler differentiate a local and a global variable of the same name? 了解更多信息

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多