在 Linux 内核代码,特别是驱动代码中经常见到的用法是使用一个标准结构,后面的代码基于这个结构来实现,类似面向对象的多态特性。
在 C 语言里面借助结构体和函数指针实现的这个功能,这里我们写了个例子,提取了关键代码:
#include <stdio.h>
struct s_new{
char name[10];
char* (* my_method)(char *name);
};
char* powerful(char *name){
printf("%s is powerful\n",name);
return name;
}
int main()
{
struct s_new my_struct = {
.name = "Jiang XD",
.my_method = powerful,
};
my_struct.my_method(my_struct.name);
return 0;
}
在 GCC 编译器编译运行结果:
jiangxd@ubuntu-server:/home/Atmel_android/jiangxd/workspace/codejoke$ gcc -o struct struct.c
jiangxd@ubuntu-server:/home/Atmel_android/jiangxd/workspace/codejoke$ ./struct
Jiang XD is powerful