c – 原型参数名称

在我的标题中,我有一个这样的原型声明:

void move(int, int);

我可以省略参数名称,这就是我从C中习惯的方法.我这样做是为了让我不必保持参数名称同步 – 如果它们在原型和实现之间有所不同,那就非常混乱了.

现在,我正在使用Doxygen记录我的所有代码,并且我决定将所有注释放入标题中.现在我必须引用在实现中定义但不在头文件中定义的参数名称:我发现这令人困惑.

/**
 * Moves the entity to the specified point.
 * @param x The x coordinate of the new position.
 * @param y The y coordinate of the new position.
 */
void move(int, int);

在生成的Doxygen HTML中,要弄清楚哪个参数是哪个参数并不容易.当然,这里可以遵循相同的顺序,但如果有一个参数,它仍然令人困惑.

另一种方法是复制参数名称并尝试使它们保持同步.但是,some people不鼓励这种方法,说头参数应该以双下划线开头,以便方法的用户不可能使用相同的名称(在_中不允许以__开头的名称).

你怎么做呢?

最佳答案
当然,如果“在C中不允许以__开头的名字”,你不应该在原型中使用它们:-) * a

我认为有两种方法可以做到这一点.

一,您可以确保评论中的参数顺序始终与原型中的顺序相匹配.

或者,两个,您实际上也可以将真实姓名放在原型中.

我自己,我更喜欢第二种方法,因为我喜欢能够告诉传入哪些参数,即使函数没有注释(或者更糟糕的是,注释已经过时).这样的原型更容易:

void move(int xcoord, int ycoord);

比它:

void move(int, int);

在某些环境中,我们甚至已经将构建过程确保所有函数原型都具有与函数定义相同的参数.

* a)这些标识符实际上不适用于常规程序. cpp0x的第17.6.3.3.2节(但这个限制在C和C中都存在了很长时间)状态:

Certain sets of names and function signatures are always reserved to the implementation:

  • Each name that contains a double underscore __ or begins with an underscore followed by an uppercase letter is reserved to the implementation for any use.
  • Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.

换句话说,不要将它们用于您自己的目的.

转载注明原文:c – 原型参数名称 - 代码日志