功能原型混乱

时间:2012-11-15 04:51:08

标签: c++ function-prototypes

我已经学习了一段时间的C ++,而我唯一无法理解的是函数原型和函数调用以及函数定义的东西。我已经阅读了各种各样的东西,但仍然不知道它意味着什么或做了什么。我只是希望能够理解和识别每一个。我很确定这些对我编写的内容很重要。我对函数原型有一个粗略的概念,我相信这是一个声明,它会返回某些东西的价值。

2 个答案:

答案 0 :(得分:1)

让我看看我是否可以用一些类比来解释

功能原型 - 它就像是产品的广告 - 它说有一个产品X,您可以从位置Y获取它。这对您作为消费者来说已经足够了,但并不是说任何关于幕后发生的事情,以获得X到Y和你。

类似地,函数原型是一个声明,只是说有一个名为X的函数somewhr,接受参数Y并返回值Z.足够的任何调用者但不能对其做任何事情自己的。
例如int DoSomething(int arg);

函数调用 - 这是消费者在Y位置询问产品X.

这是实际调用功能代码的时候。但是为了能够调用你需要知道它的功能,所以你需要(至少)一个原型用于呼叫上方的功能。
例如int a = DoSomething(1);

功能定义 - 这是制造产品X并将其传输到位置Y的实际程序。

基本上这是函数本身的代码 e.g
int DoSomething(int arg){
return arg+2;
}

C中需要函数原型(也称为前向声明),C ++中需要自由函数(不属于类的函数)

答案 1 :(得分:1)

函数原型是C独有的 - 不在C ++中使用。 C函数原型大多等同于C ++函数声明,例如:

int f(int);
int g(double);

他们不同的地方是你没有在括号中加上任何东西:

int f();

在C ++中,它将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根本没有函数原型,所以这是唯一支持的函数声明。它通常在新代码中不受欢迎。