【问题标题】:Is it recommended to give variable names in a function declaration?是否建议在函数声明中给出变量名?
【发布时间】:2015-05-14 04:48:21
【问题描述】:

据我了解,在函数声明中无需提供变量名,但仍建议使用。

例如:setcur() 函数接受两个参数:行号和 和列号。因此可以声明如下:

void setcur(int, int); 

void setcur(int row, int col);

为什么建议在函数声明中给出变量名?

【问题讨论】:

  • 也许是为了自我说明——因为参数名称的原因,不需要注释。
  • 这是文档。 void setcur(int,int); 没有说明这些整数应该是什么。
  • 没有理由不这样做。它有助于函数签名在没有注释解释的情况下有意义。

标签: c++


【解决方案1】:

为了可读性,它确实更多。你只需要函数声明中的变量类型;但是,阅读您的代码的人最好了解这些输入实际上是什么,假设您将它们命名为合适的名称。

如果您正在处理一个大文件并且您不记得您的 .h 文件中的函数将什么作为输入,这将使您的生活变得更加轻松。

【讨论】:

    【解决方案2】:

    添加一个体面的变量名称可以提高可读性并有助于记录您的函数。考虑例如

    void area(int, int); // which parameter comes first? area of what?
    

    void area(int radius, int height); // now it's clear that it is a cylinder, order is also clear
    

    您可能还想使用例如doxygen 自动生成文档,在这种情况下,您通常会记录头文件。在这种情况下,命名函数参数是有意义的,因此它们对应于 doxygen 的 \params 的名称。

    【讨论】:

      【解决方案3】:

      如果你真的很好奇,这里有很多讨论:

      Why do function prototypes include parameter names when they're not required?

      简短的回答是可读性,但使用你的例子,基本上

      void setcur(int,int); 
      

      可以实现为

      (1) void setcur(int row,int col);
      

      (2) void setcur(int col,int row);
      (any other implementations are possible, but allow 2 as an example).
      

      通过标题中的变量名称,您可以轻松了解为 row 和 col 传递的内容。否则,您需要深入研究可能与标头分开存在的代码文件。想象一下,如果你只有

      void setcur(int, int)
      

      并假设为 (1),但实际上是 (2)。您将很难在代码中调试故障。

      【讨论】:

        【解决方案4】:

        虽然这些名称在技术上不是必需的,但它们可以作为文档来帮助用户。此外,它们帮助您的 IDE 显示更好的签名、完成等。

        以某种工具感知形式添加文档可能看起来像是一种替代方法,但您的代码也可能与不同的 IDE 一起使用,并且与 cmets 不同,声明中的变量名称是提供更多语义的唯一标准化方式函数声明中的信息

        还要注意,如果是库,库的用户甚至可能看不到函数的定义,他所拥有的只是带有声明的头文件和要链接的二进制库。

        【讨论】:

          猜你喜欢
          • 2022-11-04
          • 1970-01-01
          • 1970-01-01
          • 2012-10-17
          • 2011-05-12
          • 2021-04-12
          • 1970-01-01
          • 1970-01-01
          • 2015-05-06
          相关资源
          最近更新 更多