C函数原型:void f()。推荐吗?

时间:2010-04-04 09:55:52

标签: c

我正在学习C,我在一本书中看到函数原型的形式为void f(),在函数声明或调用函数中,f函数接受参数。
因此在函数声明中我们有类似void f(long double y [],long double A)和调用函数中的f(y,A)。该函数对数组y进行操作,即当调用函数时,数组y中的一些元素正在改变。 A只是一个不变的常数值。我有两个问题:

  1. 如果将程序顶部的函数原型定义为void f()这是一个好习惯吗?或者,如果在函数声明中将它作为void f(long double y [],long double A)更好?

  2. 被调用函数f正在改变数组y中的元素。无效的正确返回类型?该程序工作正常,如上所述的空白。
    或者我应该将所有“空洞”改为“长双”。我正在使用long double,因为我需要尽可能多的精度,尽管在我的机器上,double和long double给了我15个精确数字。

  3. 非常感谢

3 个答案:

答案 0 :(得分:10)

您的问题会受到术语混淆的影响。

void f();

不是 C中的函数原型。这是一个不引入原型的函数声明。同时

void f(long double y[], long double A);

也是一个函数声明,这个是原型(即它确实引入了f的原型。)

回答你的问题,是的,用原型声明函数总是一个好习惯(即最好用原型声明它们而不是没有原型)。通常,您应该为所有外部函数声明原型(并且void f()不是原型)。

至于退货类型,这完全取决于您的意图。我不知道您更改数组元素的事实应该更好地返回long double而不是void

答案 1 :(得分:7)

  

如果定义函数原型   程序中的顶部为void f()a   好的做法?或者放更好   它为void f(long double y [],long   双A)如在函数中   声明?

肯定是后者 - 前者没有为编译器提供编译时检查的任何类型信息。 void f()告诉编译器f采用未指定的参数列表。即什么都行。

  

被叫函数f正在改变   数组中的元素y。是无效的   正确的退货类型?该计划是   工作正常,如虚空一样   描述

返回类型与要修改的参数无关。如果要表示成功代码,则可以使用非void返回类型。

答案 2 :(得分:4)

使用未指定的参数声明并不是一件好事。在C(但不是在C ++中)允许将函数声明为f()而不指定参数,但应避免使用该功能。如果函数不接受任何参数,请使用f(void)明确标记。如果函数接受参数,则始终在声明中包含参数'types。