C ++函数声明是可选的吗?

时间:2017-10-31 08:16:25

标签: c++

我在创建函数时发现了一些东西。在代码中:

#include <iostream>
using namespace std;

int add(int a, int b = 20)
{
    int r;
    r = a + b;
    return (r);
}

int main()
{
    int result;
    result = add(20);
    cout<<result;

    return 0;
}

它会起作用,因为被调用的函数位于调用者之上,但如果我将函数add()放在main()中的调用函数之下,它就不会工作。

#include <iostream>
using namespace std;

int main()
{
    int result;
    result = add(20);
    cout<<result;

    return 0;
}

int add(int a, int b = 20)
{
    int r;
    r = a + b;
    return (r);
}

并且编译器会告诉我无法找到标识符add()。 那么为什么我们要宣布功能呢?像这样:

#include <iostream>
using namespace std;

int add(int a, int b = 20);

int main()
{
    int result;
    result = add(20);
    cout<<result;

    return 0;
}

int add(int a, int b)
{
    int r;
    r = a + b;
    return (r);
}

4 个答案:

答案 0 :(得分:9)

定义是隐含的声明。声明必须提前使用。

答案 1 :(得分:7)

所有函数在使用前都需要声明。

您可以通过(1)撰写声明或(2)编写定义来实现。

完全依赖于(2)可能很诱人,但是你必然会以特定的方式订购你的程序,偶尔也是不可能的。例如,除非删除注释,否则不会编译以下内容。

   //void bar(int);

    void foo(int n)
    {
        if (!n){
            bar(n);
        }
    }

    void bar(int n)
        if (n){
            foo(n);
        }
    }

    int main()
    {
        foo(1);
    }

答案 2 :(得分:0)

如果函数定义出现在函数调用之前,则原型不是必需的。否则,函数原型是必要的,让编译器知道在调用函数时如何响应函数。

答案 3 :(得分:0)

函数声明告诉编译器函数的名称,返回类型和参数。函数定义提供函数的实际主体。

如果在函数调用之后出现函数定义,那么原型是必需的。因为它告诉编译器在调用函数时如何响应函数。

检查以下示例。

/* C++ Function Prototype and C++ Function Definition */

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

int add(int, int);         // function prototype

void main()
{
    clrscr();
    int a, b;
    cout<<"Enter any two number: ";
    cin>>a>>b;
    cout<<"\nSummation = "<<add(a, b);
    getch();
}

int add(int x, int y)     // function definition
{
    int res;
    res = x + y;
    return res;
}

如果函数定义是在函数调用之前进行的,那么声明函数原型并不是强制性的。

考虑例子。

/* C++ Function Prototype and C++ Function Definition */

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

int add(int x, int y)     // function definition
{
    int res;
    res = x + y;
    return res;
}

void main()
{
    clrscr();
    int a, b;
    cout<<"Enter any two number: ";
    cin>>a>>b;
    cout<<"\nSummation = "<<add(a, b);
    getch();
}