int func();是从没有C标准的日子即K&R C(1989年之前,第一个“ANSI C”标准出版的那一年)开始的过时函数声明。
请记住,K&R C中没有原型,关键字void尚未发明。你所能做的就是告诉编译器关于函数的返回类型。K&R C中的空参数列表表示“未指定但固定”的参数数目。固定意味着您必须每次调用具有相同数量的参数的函数(而不是像每个调用的数量和类型可变的可变参数函数printf)。
许多编译器会诊断这个结构; 特别是gcc -Wstrict-prototypes会告诉你“函数声明不是原型”,因为它看起来像一个原型(特别是如果你被C ++毒害!),但不是。这是一种旧式K&R C返回类型声明。
经验法则:永远不要将一个空的参数列表声明留空,使用int func(void)具体。这将K&R返回类型声明转换成适当的C89原型。编译器很高兴,开发人员很高兴,静态跳棋很高兴。但是,那些误导C ++的人可能会畏缩,因为他们在尝试练习外语时需要输入额外的字符:-)
在C中func()意味着你可以传递任意数量的参数。如果你不需要任何参数,那么你必须声明为func(void)。您传递给函数的类型(如果未指定)默认为int。