好的,所以我听到了不同的观点,只是想确保我正确理解了它。
对于C++
声明void f();
和void f(void);
精确地意味着相同的事情,函数f
不带任何参数。定义也是如此。
对于C
声明void f(void);
表示f
不带任何参数。
声明void f();
表示函数f
可能有参数,也可能没有参数,如果有参数,我们不知道这些参数是什么类型,或者有多少个。请注意,这与省略号不同,我们不能使用va_list
。
现在事情变得有趣了。
情况1
声明:
void f();
定义:
void f(int a, int b, float c)
{
//...
}
案例2
声明:
void f();
定义:
void f()
{
//...
}
问题:
在情况1和2中,当我们使用正确参数、错误参数或根本没有参数调用f
时,编译时会发生什么?运行时又会发生什么?
附加问题:
如果我声明了带有参数的f
,但不带参数定义它,会有什么区别吗?我能够在函数体中处理这些参数吗?
void f();
和void f(void);
是相同的。前者隐含地表示“没有参数”(编译器会推断),而后者明确地表示“没有参数”。此外,最好自己尝试这些示例,以便在以后使用编译器时更加熟练。 - yeyovoid f();
不是原型(它是一个声明,而不是原型)。 - M.M