可以在 C 中为特定结构编写函数吗?

Possible to write functions for specific structs in C?

我目前正在学习 C,刚刚学习了结构。结构似乎只能有成员,但没有方法仅限于给定的结构。假设我想为一个链表写一个add方法。

在 Java 中,我将创建一个链表 class 并在其中编写一个方法 class:

public void add(Node toAdd) {...}

在 C 中,我可以编写一个函数,它接受一个链表或一个指向链表的指针,并通过添加一个节点来修改它。但是有什么方法可以更类似于 Java 的做法吗?

我担心我会拥有一个庞大的函数文件,否则组织很少......或者这只是 C 的痛苦和 Obj-C 改进的东西?

是的,有一种方法可以在 C 中实现。您正在寻找的具体答案称为函数指针。

您可以在结构中声明一个函数指针,它链接到您在文件其他地方定义的函数。

下面的Whosebug讨论与此相关。 here

这是另一个相关讨论,指出 C struct 不支持像 X3lif 所建议的函数。并且在讨论中,解决方案是函数指针。

C - function inside struct

您可能混淆了这里的一些概念。你不能将 Java 与 C 进行比较,但你可以将 Java 与 C++ 进行比较。

  • C 用于低级编程,不支持面向对象编程。
  • C++ 是 C 的扩展,具有面向对象的特性。

所以你要找的东西不存在于C中,而是存在于C++中。在 C++ 中你可以声明 类:

class Foo {
   int member;
   void addToMember(int x) {
       member += x;
   }
};

C中没有类。通常你定义一个结构并创建一组操作这个结构的函数:

struct Foo {
    int member;
}

void fooInit(Foo *foo);
void fooAddToMember(Foo *foo, int x);

这实际上是一种古老的方式,某种面向对象的编程是如何使用不支持对象的语言完成的。

今天,再也没有人会这样做了。一个人会简单地使用 C++ 进行面向对象的编程。实际上没有必要坚持使用 C。即使现在大多数微控制器都支持 C++ 或其他面向对象的语言,甚至现代操作系统内核也正在远离纯 C。