c++ - C 和 C++ 编码标准

标签 c++ c standards

关于 C 和 C++ 编码标准的最佳实践是什么?是否应该允许开发人员随意将它们混合在一起。链接 C 和 C++ 目标文件时是否存在任何复杂问题。

传统上用 C 编写的套接字库之类的东西是否应该保留在 C 中并保存在单独的源文件中?那就是将 c 代码保存在 .c 文件中,将 c++ 代码保存在 .cpp 文件中。 在用 g++ 解析后混合使用 c 和 C++ 时,会不会有任何性能损失,因为类型安全检查不是在 C 中完成的?但在 C++ 中。将是链接 C 和 C++ 源代码文件的最佳方式。

最佳答案

最大的问题是从 C++ 代码调用 C 函数,反之亦然。在这种情况下,您要确保使用 extern "C" 将函数标记为具有“C”链接。您可以直接在头文件中执行此操作:

#if defined( __cplusplus )
extern "C" {
#endif

extern int myfunc( const char *param, int another_one );

#if defined( __cplusplus )
}
#endif

您需要 #if,因为包含它的 C 代码无法理解 extern "C"

如果不想(或不能)更改头文件,可以在 C++ 代码中进行:

extern "C" {
#include "myfuncheader.h"
}

您可以用相同的方式将 C++ 函数标记为具有 C 链接,然后您可以从 C 代码调用它。您不能对重载函数或 C++ 类执行此操作。

除此之外,混合C和C++应该没有问题。我们的 C++ 代码仍在使用许多已有数十年历史的 C 函数。

关于c++ - C 和 C++ 编码标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/283701/

相关文章:

c++ - 这是什么类型的?

c++ - 如果可能的话,总是更喜欢 std::string(ptr, size) 而不是 std::string(first, last) ?

C++11 和多态 lambda 的缺失——为什么?

c - 独立实现的各种 WG14 C 标准之间有什么区别?

c - 任何不使用空格来终止十六进制条目的方法

c - 与 C 信号的简单同步

c++ - Intel Thread Building Blocks 备选方案和许可

c++ - 重载 = 运算符时返回对象的深层拷贝

c++ - 使用并行编程 C++ 计算/访问 vector

c - #define 是否在行业标准中被禁止?