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