C99 中参数列表为空的函数与 C++98 不兼容

Functions with empty parameter list in C99 is not compatible with C++98?

本文关键字:函数 C++98 不兼容 参数 列表 C99      更新时间:2023-10-16

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

void fun()
{}
int main()
{
    fun(1,2,3);
    return 0;
}

GCC 编译代码成功,但 G++ 得出了这个:

error: too many arguments to function ‘int fun()’我完全糊涂了。
我知道C++在设计上应该与 C 兼容,但这种情况向我展示了不兼容。这种情况是故意的?

在 C 语言中,空参数列表意味着您不指定函数采用多少参数。要定义参数为 0 的函数,请使用 (void) 作为参数列表。在C++中,空参数列表意味着函数采用 0 个参数,所以是的,C 和 C++ 在这种情况下不兼容。

我知道C++在设计上应该与 C 兼容,但这种情况向我展示了不兼容。这种情况是故意的?

虽然C++在许多情况下与 C 兼容,但并非一直如此。其他例子是来自void*的隐式强制转换(在 C 中允许,但在 C++ 中不允许)和关键字(在 C 中使用 class 之类的东西作为变量名称是完全有效的,但在 C++ 中显然不是,因为它是关键字)。是的,这是设计使然。

在 c++ 中

void fun();

表示不带参数的函数。要将其传达给 C 编写

void fun(void); // also works in c++ but it's frowned upon