C 不支持类,但我们确实有棘手的 hacky 解决方法。阅读完整的解释或简单地向下滚动到代码部分。
结构声明:
我声明了一个struct带有名称的类。在里面,我使用voidfunction类型、名称Print和一个参数char进行初始化。这看起来像void class.Print(char);
结构不允许内部初始化:
但是 struct 不允许内部变量的初始化。所以我们将在外面初始化它。我们创建了一个function类,名称为Printer。它初始化并返回我们可以轻松使用的初始化结构。struct
打电话给班级:
现在我们包含了 helper header 和声明的变量 type class, name printer1, value Printer()。在我调用班级成员并使用打印字符串之后printer1.Print("Hello from class function");
main.c
#include "helper.h"
void main()
{
class printer1 = Printer();
printer1.Print("Hello from class function");
}
helper.h
#include <stdio.h> //imports int printf(...);
void print(const char* text)
{
printf(text);
}
typedef struct
{
void (*Print) (const char*);
} class;
class Printer()
{
class Printer;
Printer.Print = &print;
return Printer;
}
笔记:
- 这个确切的例子是用 VC 和 tcc 编译器成功编译和测试的。
class是示例名称。您也可以使用任何其他名称。