我们可以在没有原型声明的情况下在 main 之后定义函数吗?

-3 c++ function

#include<iostream>
using namespace std;

int sum(int ,int);
int sum(int ,int );
int main(){
    cout<<sum(1,3)<<endl;
}
int sum(int a,int b){
    cout<<"hi "<<endl;
    return a+b;
}
int sum(int a,int b,char c){
    return a+b+c;
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,我在 main 之后定义了一个没有原型声明的函数,但是编译器没有产生错误信息。

Chr*_*nis 5

原型并不是绝对必要的。函数必须在使用前声明,并在使用时(在某处)定义

单独的声明允许头文件声明一个函数的存在,而另一个文件实际定义它(.c、.cpp,甚至是一个库)。

然而,如果你只是简单地实现一个没有原型的函数,那么定义也是它自己的声明。如果它与另一个具有不同签名的现有函数共享相同的名称,则它只是添加到该名称的重载集(从那时起)。

最后,定义一个未被调用的函数并不是错误。想想当你包含<iostream>你没有调用的函数时,有多少函数被声明了!未使用的函数不会出现在最终生成的工件中。

当您为同一函数提供多个定义(链接器错误),或不同的翻译单元提供不同的内联函数定义(违反单一定义规则 (ODR))时,可能会出现问题。