| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 728 人关注过本帖, 1 人收藏
标题:有好的方法 调用这些函数吗?
只看楼主 加入收藏
wengege
Rank: 2
等 级:论坛游民
帖 子:148
专家分:93
注 册:2012-7-23
结帖率:89.47%
收藏(1)
已结贴  问题点数:10 回复次数:13 
有好的方法 调用这些函数吗?
程序中指针数组中的 每个字符串对应下列的一个函数。。。  可是顺序不能打乱。。。 用if else 看着不爽
u8 com;
  char *tcp_set;
  char *s_buff[] = {"02#","28#","40#","1#","11#","5#","0#","HFCX#","13530692885#"};
  
  tcp_set = strstr(Uart_Buff, "03155001");
  if(tcp_set != NULL){
          for(com=0; com<7; com++) {
                if(strstr(Uart_Buff,s_Buff[i]) != NULL)
                  break;            
          }
          switch(com) {
              case  0: Rest_System();       //复位系统
              break;
               case 1: Allow_Run();         //允许车辆运行
              break;
               case 2: Clear_Mileage();     //清空里程
              break;
               case 3: Set_SpcTime();       //设置间隔时间
              break;  
               case 4: Set_Speed();         //设置最高时速
              break;
              case  5: Set_Number(SendDowm_Buff);//设置系统号码
              break;
               case 6: Dis_Rail();          //禁止围栏
              break;
              case 7:  Query_Tel_Charge();  //查询话费余额
              break;
              default 8: Call_();           //拨打指定的号码
              break;
               
          }
  }
 
}
搜索更多相关主题的帖子: com 字符串 
2012-11-13 13:10
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:3 
用函数指针数组。。

自由、民主、宪政!
2012-11-13 13:25
wengege
Rank: 2
等 级:论坛游民
帖 子:148
专家分:93
注 册:2012-7-23
收藏
得分:0 
不用弄的那么复杂吧。。

打好基础,学会站在巨人的肩膀上!
2012-11-13 14:10
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:3 
函数签名固定了就可以用函数指针数组。

My life is brilliant
2012-11-13 14:44
wengege
Rank: 2
等 级:论坛游民
帖 子:148
专家分:93
注 册:2012-7-23
收藏
得分:0 
能简单明了点就好了。。

打好基础,学会站在巨人的肩膀上!
2012-11-13 15:15
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
void (*functions[])(void) = { Rest_System, Allow_Run, ... }; // 每个函数必须是不带返回值和不接收参数的,当然你也可以根据需要来改

for(com=0; com<7; com++) {
    if(strstr(Uart_Buff,s_Buff[i]) != NULL) {
        functions[com]();
        break;
    }
}

[ 本帖最后由 lz1091914999 于 2012-11-14 13:24 编辑 ]

My life is brilliant
2012-11-13 22:13
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
以下是引用lz1091914999在2012-11-13 22:13:52的发言:

void (*functions[])(void) = { Rest_System, Allow_Run, ... }; // 每个函数必须是不带返回值和不接收参数的,当然你也可以根据需要来改

for(com=0; com<7; com++) {
    if(strstr(Uart_Buff,s_Buff) != NULL) {
        functions();
        break;
    }
}


在C语言中  void* 是通用指针   使她指向带不同类型参数的函数是可行的。  这一点可以参考linux系统调用跳转表

在c++中就被限制了。。

自由、民主、宪政!
2012-11-14 08:54
wengege
Rank: 2
等 级:论坛游民
帖 子:148
专家分:93
注 册:2012-7-23
收藏
得分:0 
谢谢各位的指点!

打好基础,学会站在巨人的肩膀上!
2012-11-14 09:18
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 7楼 lwb603569640
兄弟那样的话和LZ用的switch有什么区别呢?还不是要判断,我的目的是不判断。

其实如果用继承建立关系然后用多态来做也是可行的。

My life is brilliant
2012-11-14 13:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
设计一个结构体,一个数据是放菜单的,一个数据是函数指针,根据选择跳转到对应的函数上即可。菜单是这个结构体的数组。

授人以渔,不授人以鱼。
2012-11-14 13:36
快速回复:有好的方法 调用这些函数吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050510 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved