【发布时间】:2010-11-27 02:17:27
【问题描述】:
假设我必须使用 C(没有 C++ 或面向对象的编译器)并且我没有动态内存分配,我可以使用哪些技术来实现类或类的良好近似?将“类”隔离到单独的文件中总是一个好主意吗?假设我们可以通过假设固定数量的实例来预分配内存,甚至可以在编译时将每个对象的引用定义为常量。随意对我需要实现的 OOP 概念做出假设(它会有所不同),并为每个概念提出最佳方法。
限制:
- 我必须使用 C 而不是 OOP 因为我正在为一个 嵌入式系统,以及编译器和 预先存在的代码库是 C 语言。
- 没有动态内存分配 因为我们没有足够的内存 合理地假设我们不会用完 如果我们开始动态分配 它。
- 我们使用的编译器在函数指针方面没有问题
【问题讨论】:
-
必答题:你一定要写面向对象的代码吗?如果您出于任何原因这样做,那很好,但是您将进行一场相当艰苦的战斗。如果您避免尝试在 C 中编写面向对象的代码,这可能是最好的。这当然是可能的 - 请参阅 unwind 的优秀答案 - 但它并不完全“容易”,如果您正在使用内存有限的嵌入式系统,它可能不可行。不过,我可能是错的——我不是要反驳你,只是提出一些可能没有提出的对立点。
-
严格来说,我们不必这样做。然而,系统的复杂性使得代码无法维护。我的感觉是,降低复杂性的最好方法是实现一些 OOP 概念。感谢所有在 3 分钟内回复的人。你们又疯又快!
-
这只是我的拙见,但 OOP 并不能使代码立即可维护。它可能更容易管理,但不一定更易于维护。您可以在 C 中使用“命名空间”(Apache Portable Runtime 使用
apr_为所有全局符号添加前缀,而 GLib 使用g_为它们添加前缀以创建命名空间)和其他没有 OOP 的组织因素。如果你无论如何都要重组应用程序,我会考虑花一些时间来尝试提出一个更易于维护的程序结构。 -
这个问题之前已经被无休止地讨论过了——你看过之前的答案吗?
-
这个来源,在我的已删除答案中,也可能有帮助:planetpdf.com/codecuts/pdfs/ooc.pdf 它描述了在 C 中执行 OO 的完整方法。