ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C业务代码脚本

2020-04-30 09:56:16  阅读:246  来源: 互联网

标签:脚本 const script data 代码 业务 dat fns proc


近来看了一个代码,这种代码结构需要设计好一些基础业务功能proc_fns, 有了这些基础proc_fns后,就可以通过xml来配置宏TEST_SCRIPT,生成对应的脚本源文件。

比较多的使用是base_fns的参数,有事件id,事件数据msg,有事件回调函数指针callback。

通过多种结合,代码里面的结构容器是数组,可以使用其他容器代替。

数组的是基础,而且快捷便利,执行流程通过判断下标来进行索引和遍历。比如索引对应id,遍历可以是NEXT(递增)或END(数据最大值)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef const void *data_t;
 5 typedef void (*base_fns)(data_t data);
 6 typedef struct {
 7     bool flag;
 8 }proc_dat_t;
 9 typedef struct{
10     base_fns proc;
11 }proc_fns_t;
12 typedef struct{
13     const proc_fns_t* const * script_procs;
14     const data_t* data;
15     size_t iSize;
16 } proc_script_t;
17 
18 #define GET_FNS(fns, data) &fns
19 #define GET_DATA(fns, data) data
20 #define SCRIPT_LIST(name, list) \
21     const proc_fns_t * name##_procs[] = {list(GET_FNS)}; \
22     const data_t name##_procs_data[] = {list(GET_DATA)}; \
23     const proc_script_t name##_script = {\
24         name##_procs,\
25         name##_procs_data,\
26         sizeof(name##_procs)/sizeof((name##_procs)[0]),\
27         }
28 
29 void func1(data_t arg)
30 {
31     const proc_dat_t* dat = (const proc_dat_t *)arg;
32     printf("That's func1:%d\n", dat->flag);
33 }
34 void func2(data_t arg)
35 {
36     const proc_dat_t* dat = (const proc_dat_t *)arg;
37     printf("That's func2:%d\n", dat->flag);
38 }
39 void func3(data_t arg)
40 {
41     const proc_dat_t* dat = (const proc_dat_t *)arg;
42     printf("That's func3:%d\n", dat->flag);
43 }
44 
45 const proc_dat_t ProDataDisable= {false};
46 const proc_dat_t ProDataEnable = {true};
47 
48 #define DATA_DISABLE ((data_t)&ProDataDisable)
49 #define DATA_ENABLE ((data_t)&ProDataEnable)
50 
51 const proc_fns_t DATA1 = {func1};
52 const proc_fns_t DATA2 = {func2};
53 const proc_fns_t DATA3 = {func3};
54 
55 #define TEST_SCRIPT(ENTRY) \
56     ENTRY(DATA1, DATA_DISABLE), \
57     ENTRY(DATA2, DATA_ENABLE), \
58     ENTRY(DATA1, DATA_ENABLE), \
59     ENTRY(DATA3, DATA_ENABLE), \
60     ENTRY(DATA1, DATA_DISABLE)
61     
62 SCRIPT_LIST(test, TEST_SCRIPT);
63     
64 int main(int argc, char* argv[])
65 {
66     printf("Pro:Test. Build:%s. %s\n", __DATE__, __TIME__);
67     printf("Size:%u\n", test_script.iSize);
68     for (size_t i = 0; i < test_script.iSize; i++) {
69         ((test_script.script_procs)[i])->proc((test_script.data)[i]);
70     }
71     
72     return (EXIT_SUCCESS);
73 }

 

标签:脚本,const,script,data,代码,业务,dat,fns,proc
来源: https://www.cnblogs.com/sciapex/p/12806943.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有