我学习 C++ 已经有一段时间了,唯一让我无法理解的是函数原型、函数调用和函数定义的东西。我读过各种各样的东西,但仍然不知道它的含义或作用。我只是希望能够理解和识别其中的每一个。我很确定这些对于我所读到的编程很重要。我对函数原型有一个粗略的了解,我相信这是一个返回某物值的语句。
2 回答
让我看看我是否可以用一些类比来解释
功能原型- 就像产品的广告 - 它说有一个产品 X,你可以从位置 Y 获得它。这对于作为消费者的你来说已经足够了,但没有说明幕后发生的事情。 X 到 Y 和你。
类似地,函数原型是一个声明,它只是说有一个名为 X 的函数,接受参数 Y 并返回值 Z。对于任何调用者来说已经足够了,但它自己不能做任何事情。
例如int DoSomething(int arg);
函数调用- 这是消费者在位置 Y 去询问产品 X。
这是实际调用函数代码的时间。但是为了能够调用你需要知道它存在的函数,所以你需要(至少)在调用上方的函数的原型。
例如int a = DoSomething(1);
功能定义- 这是制造产品 X 并将其运输到位置 Y 的实际过程。
本质上这是函数本身的代码。
例如
int DoSomething(int arg){
return arg+2;
}
C 中需要函数原型(也称为前向声明)和 C++ 中的自由函数(不属于类的函数)
函数原型是 C 独有的——在 C++ 中不使用。AC 函数原型大多等价于一个 C++ 函数声明,例如:
int f(int);
int g(double);
它们的不同之处在于如果您不在括号中添加任何内容:
int f();
在 C++ 中, this 声明f
为一个接受参数的函数。在 C 中,它声明f
为一个函数,而没有指定任何关于参数1的内容。要获得与 C 声明等效的 C 原型,您需要在括号之间放置一些内容:
int f(void);
后者在 C++ 中也是允许的,但大多数C++ 程序员更愿意避免它。
函数定义是您拥有函数的标头和主体的位置:
int f(int x) {
return x+4;
}
函数调用是您使用已定义的函数的地方:
int y = 2;
int x = f(y); // using the f() above, this is equivalent to int x = 6;
1在过去(大约 1985 年左右之前)C 根本没有函数原型,所以这是唯一受支持的函数声明。它在新代码中通常不受欢迎。