考虑一个C ++函数,我希望它在C语言中与它接口(例如,int foo()
),它不带任何输入参数。
C中缺少输入参数可以表示为int foo(void);
,而C中的int foo()
表示任意数量的输入参数。
但是,在C ++中,int foo()
表示不带参数的函数,int foo(void)
被认为是应该避免的C向后兼容性残余。
考虑到上述情况,最合适的是什么?
选项1:
C标头声明:
int foo(void);
C ++文件定义:
int foo(void) { ... }
选项2:
C标头声明:
int foo();
C ++文件定义:
int foo() { ... }
选项3:
C标头声明:
int foo(void);
C ++文件定义:
int foo() { ... }
答案 0 :(得分:4)
好的,我们已经知道C和C ++中f()
and f(void)
之间的区别。
因为在C中使用f()
是不好的做法(你失去了编译器将函数声明与其定义进行比较的能力,以确保它将被正确调用)并且你有对于该功能的C链接,我建议使用f(void)
毕竟,f(void)
只能保持活力,以便与C 具有向后兼容性,这正是您的用例。
只是一个小小的修正:它不是任意数量的输入参数,而是未指定,这意味着它对可变函数有很大的不同。
答案 1 :(得分:1)
我会用:
// Header
#ifdef __cplusplus
extern "C" {
#endif
void foo(void);
#ifdef __cplusplus
}
#endif
对于cpp文件:
// in cpp file
extern "C" {
void foo(void)
{
// implementation
}
}
正如我们明确表明我们使用C。