有什么区别:
void function();
int main()
{......}
void function()
{......}
VS
void function()
{.......}
int main();
在main之前声明一个函数然后在main之后定义它然后在main之前声明并定义它似乎很奇怪。这是出于审美目的吗?我的老师写的功能就像第一个例子一样。
答案 0 :(得分:7)
这仅仅是为了代码组织目的(我认为“美学”)。如果没有前向声明,您需要在使用之前编写每个函数,但是您可能希望以不同的顺序编写函数体以用于组织目的。
使用前向声明还允许您在最顶层提供文件中定义的函数列表,而无需深入了解实现。
在相互递归函数的情况下,前向声明也是必要的。考虑这个(愚蠢的)例子:
bool is_odd(int); // neccesary
bool is_even(int x) {
if (x == 0) {
return true;
} else {
return is_odd(x - 1);
}
}
bool is_odd(int x) {
return is_even(x - 1);
}
答案 1 :(得分:4)
注意我的意思是将此答案作为补充,其他人已经对这些问题给出了很好的答案。
请注意,知道如何在C ++中转发声明内容变得非常重要。一旦开始使用头文件,它基本上成为强制性的。头文件将允许您构建函数和类/结构的原型,然后在相应的.cpp文件中定义它们。这是C ++非常重要的组织功能。
// MyClass.h
class MyClass
{
public:
MyClass(int x);
void printInt();
private:
int myInt;
};
// MyClass.cpp
MyClass::MyClass(int x)
{
MyClass::myInt = x;
}
void MyClass::printInt()
{
std::cout << MyClass::myInt;
}
以这种方式做事使得你不会完全受到大量代码的影响。特别是如果你正在编写具有相当大量源代码的真实程序。
因此,在你提出的问题中,你提出的声明实际上只是一种偏好,后来真的不会是一种选择。
答案 2 :(得分:1)
看看这个例子:
int max(int num1, int num2)
{
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
其中,int max(int num1, int num2)
表现为一种功能。
现在,我们有一个程序
#include <iostream>
using namespace std;
// function declaration
int max(int num1, int num2);
int main ()
{
// local variable declaration:
int a = 100;
int b = 200;
int ret;
// calling a function to get max value.
ret = max(a, b);
cout << "Max value is : " << ret << endl;
return 0;
}
// function returning the max between two numbers
int max(int num1, int num2)
{
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
我将max()
函数与main()
函数一起保存并编译了源代码。在运行最终可执行文件时,它会产生以下结果:
Max value is : 200
调用函数:
在创建C ++函数时,您可以定义函数必须执行的操作。要使用函数,您必须调用或调用该函数。
程序调用函数时,程序控制转移到被调用函数。被调用的函数执行已定义的任务,当执行其返回语句或达到其函数结束右括号时,它将程序控制返回给主程序。
要调用函数,只需要传递必需的参数和函数名,如果函数返回一个值,那么就可以存储返回的值。
答案 3 :(得分:0)
你的第一个例子是自上而下的风格,第二个是自下而上的风格。
这在很大程度上是审美的,因为有些人比较喜欢一个人。
例如,有人可能更喜欢在获取详细信息(自上而下)之前获得程序的高级概述,而另一个人可能更愿意首先看到详细信息(自下而上)。
自上而下方法中声明的实际好处是,您可以更轻松地重新组织函数定义,而无需担心订购。