头文件1:func_desc.h
#ifndef __FUNC_DESC_H__
#define __FUNC_DESC_H__
#include <stdio.h>
#include <String.h>
#include <malloc.h>
#include "register_mod.h"
#define NUMBER_XJ 2
struct class_attr;
struct func_operations {
void (*change_id)(struct class_attr *arg1, int id);
int (*compera_values)(struct class_attr *arg1, char *Str);
void (*load_message)(struct class_attr *arg1);
};
struct class_attr {
int id;
char private_data;
char *name;
char *number;
char *message;
struct func_operations *fops;
};
#endif
头文件2:register_mod.h
#ifndef __REGISTER_MOD_H__
#define __REGISTER_MOD_H__
#include "func_desc.h"
#define _LIST_MAX_LEN_ 10
struct t_list {
int id;
struct class_attr *attr;
// struct t_list *next;
};
void look_for_list_each(char *Str);
int register_structs(struct class_attr *dev, struct func_operations *fops);
#endif
辅助模块:register.c
#include "register_mod.h"
static cnt = 0;
static struct t_list m_list[_LIST_MAX_LEN_];
/*
* 将结构体加入m_list数组中
*/
int register_structs(struct class_attr *dev, struct func_operations *fops)
{
dev->fops = fops;
m_list[cnt].attr = dev;
m_list[cnt].id = dev->id;
cnt++;
return 0;
}
/*
* 查找匹配数组元素
*/
void look_for_list_each(char *Str)
{
int i;
int ret;
for (i = 0; (i < 10) && (NULL != m_list[i].attr); i++) {
ret = m_list[i].attr->fops->compera_values(m_list[i].attr, Str);
if (!ret) {
m_list[i].attr->fops->load_message(m_list[i].attr);
break;
}
if (9 == i)
{
goto failed_1t;
}
}
failed_1t:
printf("Didn't find the %s.\n", Str);
}
主模块:main.c
#include "func_desc.h"
static struct class_attr *ops_stru;
/*
* 修改结构体id号
*/
void change_id(struct class_attr *ops_stru, int id)
{
ops_stru->id = id;
}
/*
* 比较结构体的name值
*/
int compera_values(struct class_attr *ops_stru, char *Str)
{
if (!strcmp(ops_stru->name,Str)) {
return 0;
} else {
return 1;
}
}
/*
* 打印结构体内部变量
*/
void load_message(struct class_attr *ops_stru)
{
printf("Name : %s\n", ops_stru->name);
printf("Number : %s\n", ops_stru->number);
printf("Id : %d\n", ops_stru->id);
printf("Message : %s\n", ops_stru->message);
}
struct func_operations f_ops =
{
.change_id = change_id,
.compera_values = compera_values,
.load_message = load_message,
};
int main(int argc, char *argv[])
{
char *input;
/* 分配指针空间 */
input = (char *)malloc(sizeof(char) + 10);
ops_stru = (struct class_attr *)malloc(sizeof(struct class_attr));
/* 初始化结构体特性 */
ops_stru->name = "XiaoJia";
ops_stru->number = "10524001";
ops_stru->id = NUMBER_XJ;
ops_stru->message = "He is a boy.";
/* 注册class_dev */
register_structs(ops_stru, &f_ops);
/* 获取输入 */
printf("Input the name you want to find:");
scanf("%s",input);
/* 查找是否存在此数据 */
look_for_list_each(input);
/* 释放内存空间 */
free(input);
free(ops_stru);
return 0;
}
尝试着使用不同的思路与编程手法去编写,一些功能简单的小摸块;可以打开自己的编程思路与体系设计思路,同时也可以掌握更多自己少有但是实用的编程技巧。总的来说,还是蛮有意思的。:-)