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

标签 c++ c void

考虑一个 C++ 函数,我想在 C 中连接它(例如,int foo()),它不接受任何输入参数。

C中输入参数的缺失可以表示为int foo(void);,而C中的int foo()表示输入参数任意个数。

但是,在 C++ 中,int foo() 表示一个不带参数的函数,int foo(void) 被认为是 C 向后兼容的残余,应该避免。

考虑到以上情况,什么是最合适的?

Option 1:

C header declaration : int foo(void);

C++ file definition : int foo(void) { ... }

选项 2:

C header declaration : int foo();

C++ file definition : int foo() { ... }

选项 3:

C header declaration : int foo(void);

C++ file definition : int foo() { ... }

最佳答案

好的,我们已经知道f() and f(void)之间的区别了。在 C 和 C++ 中。

因为使用 f() 在 C 中是不好的做法(你失去了编译器将函数的声明与其定义进行比较的能力,以确保它被正确调用)并且你有 C 链接这个函数,我建议使用 f(void)

毕竟,在 c++ 中,f(void) 只是为了与 C 具有向后兼容性而保持活力,这正是您的用例。


只是一个小的更正:它不是任意数量的输入参数,而是未指定,这意味着这与可变参数函数有很大的不同。

关于c++ - C 头文件中的函数声明与其在 .cpp 文件中的定义之间的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25039510/

相关文章:

c++ - 对包含结构的 std::list 进行排序

c - 使用 free() 时程序发生奇怪的变化

c - pthread和select()函数的作用是什么?

unit-testing - Mockito - thenCallRealMethod() 在 void 函数上

Java - 使用 JFileChooser 将字符串路径存储在表中,获取设置方法?

c++ - 多种类型的类模板特化

Java到C++转换代码

C++ pugiXML,在节点中的第一个子节点之前附加一个子节点

c - 如何读取数组中的字节

c - 如果指针可以转换为任何类型(在 c 中),为什么要 void pointer?