假设我有这个功能:
void func() {}
当我func
使用某些参数(例如func(132)
)调用时,C++
编译器会产生错误,而C
编译器不会。
在这种情况下,两个编译器有什么区别?C++
产生这个错误有什么优点/缺点?
没有优点或缺点。C 支持这一点,以便与 1980 年代的 K&R C 兼容。如果您仍在使用 1980 年代编写的代码,您可能会喜欢此功能。如果您想从编译器获得更好的诊断,您可能不喜欢此功能。
void func();
在 C 中,这意味着func
采用未指定的参数。
如果需要指定函数不带参数,可以这样写:
void func(void);
在 C++ 中,这两个原型是相同的。(在 C 中,只有第二个是原型。)如果您使用 GCC/Clang 的-Wstrict-prototypes
选项进行编译,您将收到void func();
在 C 中使用的警告,这是您应该做的。
这只是关于函数声明。 在这两种语言中,以下函数定义是相同的:
// These two are the SAME
void func() { }
void func(void) { }
// These two are DIFFERENT
void func();
void func(void);
在 C++ 中,该函数没有参数。在 C 中,它意味着不确定数量的参数。
这是 C 语言早期的保留,其中每个函数都返回 an int
,并且对于传递的参数要轻松得多。