打印

菜单编写难题.函数指针和函数输入变量。

[复制链接]
2999|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snakeemail|  楼主 | 2010-6-27 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 snakeemail 于 2010-6-27 11:39 编辑

Q1.我使用的是PIC的MCC18编译器。
想用这个结构体实现菜单的跳转。


typedef struct
{
        uchar KeyStateIndex; //当前状态索引号
        uchar KeyUpState; //按下"向上"键时转向的状态索引号
        uchar KeyDnState; //按下"向下"键时转向的状态索引号
        uchar KeyEscState; //"ESC"索引
        uchar KeyCrState; //按下"回车"键时转向的状态索引号
        rom void (*CurrentOperate)(); //当前状态应该执行的功能操作
}KbdTabStruct;

rom void (*KeyFuncPtr)(); //按键功能指针

rom KbdTabStruct  KeyTab[1] =
{
        { 0, 0, 0, 0, 0, (*DispMain)}   
};

结果程序编译到此句出现告警.
KeyFuncPtr = KeyTab[0].CurrentOperate;
(*KeyFuncPtr)();//执行当前按键的操作

1988:Warning [2058] call of function without prototype

请问如何消除这个告警


Q2.函数指针如何带参数

由于有一些菜单函数别人已经写好,例如:
void DispMenu(rom char * pString, unit Value, uint Max, uint Min);
     DispMenu("电压",             Voltage,    120,      20)

现在我要把加入菜单的数组中
rom KbdTabStruct  KeyTab[2] =
{
        { 0, 0, 0, 0, 0, (*DispMain)},//麻烦是有些菜单函数是带输入参数,有的不带
        { 0, 0, 0, 0, 0, (*DispMenu) //这里我还要把输入参数加上,怎么弄?  
};                                   //("电压",             Voltage,    120,      20)

相关帖子

沙发
McuPlayer| | 2010-6-27 11:28 | 只看该作者
函数指针也可以指向带参数的函数,前提是你定义此函数指针的时候明确定义

使用特权

评论回复
板凳
zq1987731| | 2010-6-27 23:17 | 只看该作者
rom void (*CurrentOperate)();
rom void (*CurrentOperate)(rom char, unit, uint, uint);
uint (*CurrentOperate)(uint);
................
想怎么定义都行...有需要带参数的话...
{ 0, 0, 0, 0, 0, (*DispMenu)("电压", Voltage, 120, 20)}
另外定义函数指针成员时新建个union,需要什么形式就加什么的进去,反正不浪费空间

使用特权

评论回复
地板
ayb_ice| | 2010-6-28 09:03 | 只看该作者
LZ定义的函数指针不带参数,而使用时又要参数
显然函数指针定义错误

使用特权

评论回复
5
snakeemail|  楼主 | 2010-6-28 19:45 | 只看该作者
我试一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:提供500W线性 交流电源。0~300VAC,45~500Hz 提供10KW,0-330V直流电源,具体见http://blog.21ic.com/user1/3639/archives/2012/88528.html

547

主题

1910

帖子

8

粉丝