我一直认为函数原型(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/