C99 中参数列表为空的函数与 C++98 不兼容
Functions with empty parameter list in C99 is not compatible with C++98?
这是用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
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 我正在使用dev c ++,但收到错误(C++98'array'必须由构造函数初始化)
- 在 C++98 中,'dvd1' 必须由构造函数初始化,而不是由 '{...}' 初始化
- C++98 中的常量表达式函数
- 我需要用c ++ 98重写c ++ 11代码,c ++ 11正在使用lambda函数[&](const Output & o
- 移动返回对象的构造函数会中断C++98 代码?
- 从函数指针对标准 C++98 中的函数类型参数进行静态推理
- 抛出可由C++98和C++1x编译的析构函数.有更好的方法吗
- C99 中参数列表为空的函数与 C++98 不兼容
- C++11 移动构造函数的速度比 C++98 复制构造函数慢
- 基于 C++98 中函数对象运算符 () 签名的“重载”函数模板
- 在 C++98 中实现移动构造函数和移动赋值运算符以获得更好的性能
- 我们需要一个可访问的复制构造函数来初始化C++98/03中的值吗
- c++ 98:根据成员的存在提供不同的函数实现
- 具有多个构造函数的c++ (c++ 98)函子