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

yCa*_*ran 7 c

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

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

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

非常感谢

AnT*_*AnT 10

你的问题会受到术语混淆的影响.

void f();
Run Code Online (Sandbox Code Playgroud)

不是一个函数原型中.这是一个函数声明的是不引入的原型.与此同时

void f(long double y[], long double A);
Run Code Online (Sandbox Code Playgroud)

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

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

至于退货类型,这完全取决于您的意图.我没有看到你正在改变数组元素的事实应该让它更好地返回long double而不是void.


Ale*_*ski 7

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

绝对是后者 - 前者没有为编译器提供编译时检查的任何类型信息.void f()告诉编译器f采用未指定的参数列表.无论如何.

被调用函数f正在改变数组y中的元素.无效的正确返回类型?该程序工作正常,如上所述的空白.

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