c++ - 为什么函数原型(prototype)在不需要时包含参数名称?

标签 c++ naming function-prototypes

我一直认为函数原型(prototype)必须包含函数的参数及其名称。不过,我刚刚试了一下:

int add(int,int);

int main()
{
    std::cout << add(3,1) << std::endl;
}

int add(int x, int y)
{
    return x + y;
}

成功了!我什至极度谨慎地尝试编译:

g++ -W -Wall -Werror -pedantic test.cpp

它仍然有效。所以我的问题是,如果你不需要函数原型(prototype)中的参数名称,为什么这样做如此普遍?这样做有什么目的吗?跟函数的签名有关系吗?

最佳答案

不,这些不是必需的,而且大多被编译器忽略。你甚至可以在不同的声明中给它们不同的名字;以下是完全合法的:

int foo(int bar);
int foo(int biz);
int foo(int qux) {
    ...
}

(编译器会检查每个名称在同一个参数列表中只使用一次:int foo(int bar, int bar); 被拒绝。)

将它们放入的原因是文档:

  • 如果有人读了你的头文件,他们一眼就能看出每个参数的用途。
  • 如果您使用高级 IDE,它可以在您开始键入函数调用时显示参数名称。
  • Doxygen 等文档工具可以解析参数名称并将其显示在文档中。

关于c++ - 为什么函数原型(prototype)在不需要时包含参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5234169/

相关文章:

database - 字段命名问题

actionscript-3 - 自定义函数的原型(prototype)函数

c++ - C++ 中的回调 - 无法理解

c++ - 模板和 friend

c++ - 通过 eventFilter 获取 QLineEdit 的某些属性到剪贴板

C# 2022 IDE - 没有关于代码样式或变量命名的警告?

java - 有没有一种好方法来跟踪传递给类的参数变量

c++ - C++ 中的函数声明

c - 为什么没有参数的函数(与实际函数定义相比)可以编译?

c++ - 我应该使用 shared_ptr 还是 unique_ptr