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

标签 c++ c gcc c99 c++98

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

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

GCC 成功编译了代码,但是 G++ 出现了这个:
错误:函数“int fun()”的参数过多
我完全糊涂了。
我知道 C++ 应该在设计上与 C 兼容,但这种情况表明我不兼容。这种情况是设计造成的吗?

最佳答案

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

I knew that the C++ should be compatible with C by design,but this case shows me incompatibility.This case happens by design?

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

关于c++ - C99 中参数列表为空的函数与 C++98 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955041/

相关文章:

c# - 此 C++ 代码的 C# 等价物是什么(带有 InPtr)

c++ - unordered_set.hpp 中的错误 C3083?

c - 我编写了一个程序来添加两个矩阵,但它不起作用。对出了什么问题有什么建议吗?

c - 当我用 Borland C++ 构建这段代码时,为什么它不能正确定位光标?

c - 为什么 SP(显然)存储在 Cortex-M3 的异常条目上?

c++ - 为什么枚举类的默认类型与枚举的基础类型不同?

c++ - 寻找更紧凑的语法(简单代码)——C++

c - strtok 及其用法

c - Mac 上的 SetPixel 等效项?

c++ - "Missing non-virtual thunks"和继承顺序