关于c++中函数原型声明的小讨论

来源:互联网 发布:这个历史挺靠谱淘宝价 编辑:程序博客网 时间:2024/05/16 11:04

      或许我们都知道在写程序时如果把被调函数写到了main()函数的后面,那么我们就必须在main()函数的前面对被调函数的原型进行声明。但是你知道这其中的原理吗?

      先来看个程序:

           #include<iostream>
           using namespace std;
           int main()
           {
                 int a=1,b=2;
                 int s;
                 s=add(a,b);
                 cout<<"s="<<s<<endl;
                 return 0;
          }
         int add(int x,int y)
         {
              return x+y;
         }

      这个程序运行时会出现错误:error "add()" was not declared in this scope   <错误的意思是说add是一个未声明的标示符>

     要想理解这个错误形成的原因,就要先来了解一下这个程序的运行原理:

             程序编译时总是从上向下编译,在上面的例子中,编译器首先会编译到被调函数add的语句,但是在add之前并没有任何add的信息,此时编译器就会报错。

     现在,我们把上面的程序稍做一下修改:

         #include<iostream>
         using namespace std;
         int add(int x,int y);
         int main()
         {
             int a=1,b=2;
             int s;
            s=add(a,b);
            cout<<"s="<<s<<endl;
            return 0;
        }
        int add(int x,int y)
        {
            return x+y;
        }

 这样程序就没有错误了。

 那么我们就来总结一下函数的声明所起到的作用吧!

  编译器在遇到函数的声明时,就会知道被调函数的基本信息,包括函数的名称,函数的参数类型,函数有几个参数以及函数的返回值类型。这样在编译到函数的调用时就可以根据这些信息对函数调用的合法性进行检查。

   函数声明有两种形式:
             ①.返回值类型     函数名(参数类型1,参数类型2,·······)<如:int add(int,int)>

            ②.返回值类型     函数名(参数类型1  参数名1,参数类型2   参数名2,······)           <如:int add(int  x,int y)>

            

 

0 0