C99中空参数列表的功能与C++ 98不兼容?

ric*_*apo 2 c c++ gcc c99 c++98

这是用GCC(带-std = c99)和G ++(带-std = c ++ 98)编译的代码:

void fun()
{}
int main()
{
    fun(1,2,3);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC成功编译了代码,但G ++提出了这个问题:
error: too many arguments to function ‘int fun()’
我完全感到困惑.
我知道C++应该与C兼容,但这个案例表明我不兼容.这种情况是通过设计发生的?

sep*_*p2k 5

在C中,空参数列表意味着您不指定该函数所使用的参数数量.要定义具有0个参数的函数,可以将其(void)用作参数列表.在C++中,空参数列表表示该函数采用0参数,因此,在这种情况下,C和C++不兼容.

我知道C++应该与C兼容,但这个案例表明我不兼容.这种情况是通过设计发生的?

虽然在许多情况下C++与C兼容,但事实并非如此.其他示例是来自void*(在C中允许但在C++中不允许)和关键字的隐式转换(在C中使用像class变量名这样的东西是完全有效的,但显然不是在C++中它是关键字).是的,这是设计的.