16

假设我有这个功能:

void func() {}

当我func使用某些参数(例如func(132))调用时,C++编译器会产生错误,而C编译器不会。

在这种情况下,两个编译器有什么区别?C++产生这个错误有什么优点/缺点?

4

2 回答 2

37

没有优点或缺点。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);
于 2012-11-26T09:04:04.843 回答
8

在 C++ 中,该函数没有参数。在 C 中,它意味着不确定数量的参数。

这是 C 语言早期的保留,其中每个函数都返回 an int,并且对于传递的参数要轻松得多。

于 2012-11-26T09:03:58.077 回答