2016-04-08 45 views
-3

我要到K & R和我在函数一章,我有一个快速的问题:试图了解函数原型

难道我总是要申报的功能原型?什么决定了原型中的什么样的论点?它可以只是在函数定义中的两个变量吗?

谢谢!

+0

_您可以根据您的要求决定函数应具有哪些参数。如果你的工作是通过2个参数完成的,然后传递两个参数。参数数量不是预定义的(_built-in函数是exception_)。 – ameyCU

+2

原型应该与函数定义完全相同,后跟';'。 C的老版本允许其他方式来做到这一点,但这些会导致混淆。如果函数定义(执行体)在实际调用之前出现在模块中,则不需要原型 - 因为编译器已经知道它。 –

+0

不,你不需要总是声明原型。如果你写了几个函数,那么编写原型将帮助你保持轨道。假设你需要一个函数,你只需要输入一个原型,然后你应该完成这个功能。否则,你可以写上面描述的@Weather Vane函数。 – cjahangir

回答

1

您应该始终声明并使用原型语法定义您的函数;这样做可以让编译器在函数调用中传递错误数量或类型参数的地方捕获错误。 C仍支持不使用原型语法的声明和定义,但仅支持古代代码库;你不应该使用旧的语法编写新的代码。

至于什么参数进入原型,完全取决于函数需要做什么。假设我正在为数学库中的pow()函数写一个替换。我需要2个参数,一个是基础,接下来的是指数:

double myPow(double base, int exp); // declaration, prototype syntax 
... 
double myPow(double base, int exp) // definition, prototype syntax 
{ 
    ... 
} 

您可以在声明中省略该参数名:

double myPow(double, int); 

要紧的是数量和类型参数被指定。

旧式声明和定义是这样的:

double myPow(); // declaration, old syntax 
... 
double myPow(base, exp) // definition, old syntax 
    double base; 
    int exp; 
{ 
    ... 
} 

你不选择你定义一个函数的参数的唯一时间是main功能;在您定义main的实现时,您无法确定要采用哪些参数。 main或者不采用任何参数:int类型和char **

int main(void) 

或两个参数:

int main(int argc, char **argv) 

的实现为main可以提供额外的原型(如一些Unix发现三分之一char **envp参数实现),但这仅限于实现 - 您不能为main创建任意的接口。