假设我有这个功能:
void func() {}
当我使用某些参数(例如func
)调用func(132)
时,C++
编译器会产生错误,而C
编译器则不会。
在这种情况下,两个编译器有什么区别? C++
出现此错误有哪些优点/缺点?
答案 0 :(得分:36)
没有优点或缺点。 C支持这与20世纪80年代与K& R C的兼容性。如果你仍在使用你在20世纪80年代写的代码,你可能会喜欢这个功能。如果您希望从编译器中获得更好的诊断,则可能不喜欢此功能。
void func();
在C中,这意味着func
需要未指定的参数。
如果您需要指定该函数采用 no 参数,请按以下方式编写:
void func(void);
在C ++中,两个原型是相同的。 (在C中,只有第二个是原型。)如果使用GCC / Clang的-Wstrict-prototypes
选项进行编译,您将收到在C中使用void func();
的警告,正如您所希望的那样。
这只是关于函数声明。在这两种语言中,以下函数定义是相同的:
// These two are the SAME
void func() { }
void func(void) { }
// These two are DIFFERENT
void func();
void func(void);
答案 1 :(得分:8)
在C ++中,该函数没有参数。在C中,它意味着不确定数量的参数。
从C的最早期开始,这是一个保留,其中每个函数都返回int
,而且传递的参数更加宽松。