可以在 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。
我目前正在学习 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。