为什么我们可以通过以下方式定义两个具有相同签名的函数?
extern void print(int *ia, int sz);
void print(int *array, int size);
这些不是定义,它们是(冗余的)声明。如果你通过提供一个函数体将它们都变成定义,你肯定会从你的编译器中得到一个错误。
C 和 C++ 中的“声明”只是告诉名称和该名称的类型。
C 和 C++ 中的“定义”实际上使事物存在。分配变量空间并设置初始值,生成函数代码等(好的,这是一个有点简化的版本)。
这两个是声明,因为它们缺少函数体。并且由于它们是函数,extern
因此它们是不必要的,因此它们是相等的。只要没有冲突,您可以根据需要多次声明相同的内容。而且由于函数允许基于 C++ 中的参数重载,因此只有在创建具有相同参数但返回类型不同的函数时才会发生冲突。使用变量或 C 函数,您不能有名称冲突。