C头中函数声明与.cpp文件中定义之间的一致性

时间:2014-07-30 14:30:26

标签: c++ c void

考虑一个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() { ... }

  

2 个答案:

答案 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。