用 C++ 编译 GNU C 项目

Compile GNU C project with C++

我刚加入一个项目,有一堆代码(过去 5 年由 4 或 5 个不同的人编写)。目前都是C,但我想将项目迁移到C++以利用OOP。

第 1 步将简单地保留所有现有代码,只选择性地将非常小的功能片段转换为面向对象的。

我的理解是 C 可以被 C++ 编译,但也许我的理解是错误的。

因此,在我投入大量时间尝试实际执行之前,我是否能够相对轻松地使用 C++ 编译现有的 C 代码?

或者,这是否可能需要大规模迁移才能起作用?

哪些因素会影响我提出的任务的复杂性?

所以要明确一点 - 我 不是 询问将所有代码转换为对象、将函数转换为方法等的项目有多大 - 而是,使用 C++ 编译器而不是 C 编译器编译现有的 C 代码可能会遇到什么问题。

提前致谢 - 我期待您能提供任何 help/guidance。

编辑

听起来这真的不是个好主意。我一直认为 C++ 是 C 的扩展,但听起来它们差异很大,因此这不是一个可取的路径。最终,我并没有将它们视为不同的语言,而是希望 c++ 比听起来更向后兼容 c。我最初的搜索看起来人们已经取得了不同程度的成功,但这里的回答让我觉得我真的应该将它们视为两种不同的语言。谢谢!

我认为您应该查看 here 以获得(可能的)问题列表。

我过去对 C 到 C++ 的迁移所做的是让 C 代码正常工作(用 C 编译器编译的 C 代码),并并行地用 C++ 从头开始​​重写代码。

I always thought of c++ as an expansion of C, but it sounds like they're different enough that this is not an advisable path.

C++ 不是 C 的扩展。它们是完全不同的语言。用C++编译C代码并不是简单的启用"OO-mode"。当您使用 C++ 编译器编译除琐碎的 C 代码之外的任何东西时,由于两种语言之间的差异,您可能会向自己敞开心扉。

am I likely to be able to get the existing C code to compile using C++ relatively easily?

同样,您有一个根本性的误解 -- C++ 不是 C 的某些扩展版本。它们是不同的语言。

最好的做法是慢慢将您的代码迁移到 C++,但使用两个 不同的编译器。用C编译器编译C代码,用C++编译器编译C++代码。这不是一项具有挑战性的壮举,因为任何现代编译器套件(如 GCC 和 clang)都可以很好地编译 C 和 C++。

is this likely to involve a massive migration before it will work?

如果您打算将代码转换为 C++,那么可以。

有一件事值得一提:如果您使用 C++ 编译器编译 C 代码,并称其为 C++ 编程,那么您就失去了 C++ 开发环境的精神。如果您使用 C++ 编程,但使用的 C 代码几乎没有面向对象,那么使用 C++ 有什么意义呢?只需跳过 OO 的开销和 C 中的代码。使用 C++ 编译器并不是什么可以立即使您的代码变得更好的神奇过程。