面向对象的ANSI C?

可能重复:
你能用C编写面向对象的代码吗?

你好,

我想知道是否可以使用严格的ANSI C作为面向对象的语言。 如果可能,我如何在ANSI C中创建一个类。虽然该语言不是为OO设计的,但我真的很想尝试这个。

任何例子,链接等都是值得赞赏的。

提前致谢,

Marnix van Rijswijk。

结构可以包含方法和变量

 struct myStructFoo {
     int fooBar();
     int privFooBar;
 };

这就是你如何使用普通的旧的ANSI C编译器派生OO“东西”,如果你想用C ++学习完整的OOP,你会更好地使用ANSI C ++编译器,因为它更适合你的需要……使用C语言的OOP样式是….以这种方式看待它,确保你可以使用一个结构使用一个对象,但名称并不完全……直观…因为struct更像是用于保存字段和是整数数据结构的一部分,如链表,堆栈,队列等。如果您有ANSI C ++编译器,它的外观如下:

 class myFoo {
  上市: 
      int fooBar();
  私人的:
      int privFooBar;
 };

比较并查看它看起来更直观,通过publicprivate关键字指定信息隐藏。

C没有通过类直接支持OO,但您可以轻松地模拟它。

如何执行此操作的基础是,您可以创建一个包含数据成员的结构和一个相关的函数列表,这些函数将指向该结构的指针作为它的第一个参数。

更多信息

这当然是可能的,虽然我不喜欢这样做。 面向对象C的一种流行方法可以在Gnome中使用的GObject架构中找到。 这篇文章(以及关于GObject的进一步阅读)应该给你一些想法:

http://en.wikipedia.org/wiki/Gobject

实际上正在进行一种称为OOC语言的努力来编写像C这样面向对象的语言。 它与C略有不同,因此根本不是C语言中的对象,而且我个人从未使用过它 – 根据我的喜好,它与C相差太远,但它可能值得一看。

有趣的是,它确实在编译之前将“OOC”转换为C. 可能值得一看它是如何实现这一点的,因为它将有效地将对象转换为C.我怀疑这将像其他海报提到的那样完成(结构指针等),尽管我还没有看过它。

有点。 记住,C ++和objective-C都是用C编译器的预处理器一次处理的。 最后,你只需重写c ++