我正在学习C,我在一本书中看到函数原型的形式为void f(),在函数声明或调用函数中,f函数接受参数。
因此在函数声明中我们有类似void f(long double y [],long double A)和调用函数中的f(y,A)。该函数对数组y进行操作,即当调用函数时,数组y中的一些元素正在改变。 A只是一个不变的常数值。我有两个问题:
如果将程序顶部的函数原型定义为void f()这是一个好习惯吗?或者,如果在函数声明中将它作为void f(long double y [],long double A)更好?
被调用函数f正在改变数组y中的元素。无效的正确返回类型?该程序工作正常,如上所述的空白。
或者我应该将所有“空洞”改为“长双”。我正在使用long double,因为我需要尽可能多的精度,尽管在我的机器上,double和long double给了我15个精确数字。
非常感谢
答案 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。