我在创建函数时发现了一些东西。在代码中:
#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);
}
答案 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();
}