c++ - 如果用 C++ 重写了 C 项目的部分代码,但保留了相同的 API,是否存在 ABI 兼容性问题?

标签 c++ c abi

对于一个用 C 写的共享库项目,如果我用 C++ 重写部分代码,但保留完全相同的 API,是否会出现 ABI 兼容性问题?

最佳答案

如果您保留相同的 API(函数名称和参数类型),您应该可以继续使用。

需要做的是用这个(从here复制粘贴)包装您的头文件:

#ifdef __cplusplus
extern "C" {
#endif

// all of your legacy C code here

#ifdef __cplusplus
}
#endif

这确保 C++ 编译器不会破坏这些名称,因此 C 编译器的外部符号仍然可以链接到导出。

关于c++ - 如果用 C++ 重写了 C 项目的部分代码,但保留了相同的 API,是否存在 ABI 兼容性问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444387/

相关文章:

c++ - C 的标准库

c++ - QOpenglWidget 和 QML Quick

c - Initializer is not a constant 错误

assembly - 为什么 Clang 在将 double 转换为 ulonglong 时调用 %eip+1?

c++ - MSVC 编译器错误 C2688 : Microsoft C++ ABI corner case issue?

c++ - 以相反的顺序插入 vector

c++ - vector.push_back() 崩溃

c++ - 如何使用 SDL2 为每个线程设置一个共享的 OpenGL 上下文?

c - modbus 十六进制地址转换

c++ - 在 C++ 中,重写现有虚函数是否会破坏 ABI?