试图理解函数原型

时间:2016-04-08 17:06:22

标签: c

我正在通过K& R和我参加功能章节,我有一个简单的问题:

我是否总是要将函数声明为原型?是什么决定原型中会有什么样的论点?它只是函数定义中的两个变量吗?

谢谢!

1 个答案:

答案 0 :(得分: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 main( void )

或类型intchar **的两个参数:

int main( int argc, char **argv )

实现可以main提供额外的原型(例如在某些Unix实现中找到的第三个char **envp参数),但这仅限于实现 - 您不能为main创建任意界面。