假设我有这个功能:
void func() {}
Run Code Online (Sandbox Code Playgroud)
当我func使用某些参数(例如func(132))调用时,C++编译器会产生错误,而C编译器则不会.
在这种情况下,两个编译器之间有什么区别?C++这个错误产生了哪些优点/缺点?
Die*_*Epp 36
没有优点或缺点.C支持这一点,以便与20世纪80年代的K&R C兼容.如果你仍在使用你在20世纪80年代写的代码,你可能会喜欢这个功能.如果您希望从编译器获得更好的诊断,则可能不喜欢此功能.
void func();
Run Code Online (Sandbox Code Playgroud)
在C中,这意味着func需要未指定的参数.
如果需要指定该函数不带参数,请按以下方式编写:
void func(void);
Run Code Online (Sandbox Code Playgroud)
在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);
Run Code Online (Sandbox Code Playgroud)