请教个C语言双目运算的问题!

2020-01-26 13:00发布


平时很少用到双目运算,今天突然想用一下,但却发现了一个奇怪的问题,请大家帮忙看看。

如果使用这种写法:
  1. if (( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus ))
  2.         {
  3.                 WorkHookFunction_Table[ g_tDevice.chFunction ].fun();
  4.         }
  5.         else
  6.         {
  7.                 WorkHookFunction_Table[ 0 ].fun();
  8.         }
复制代码那么程序运行是正常的,但是如果使用双目运算的写法:
  1. WorkHookFunction_Table[ (( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus ))?g_tDevice.chFunction:0 ].fun();
复制代码程序运行的结果就不对了,一直都是运行  WorkHookFunction_Table[ 0 ].fun();

在网上翻了下资料,还是没找到我的第二种写法错在哪里,请大家帮忙指点一下.........

PS:程序是使用Keil C51写的,WorkHookFunction_Table是一个函数指针数组
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
二进制
1楼-- · 2020-01-26 13:18
楼主 可以看一下 汇编的代码 就知道了
ijlc1314
2楼-- · 2020-01-26 14:49
 精彩回答 2  元偷偷看……
68336016
3楼-- · 2020-01-26 14:50
WorkHookFunction_Table[ (( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus ))?g_tDevice.chFunction:0 ].fun();

红 {MOD}部分加个判断看看
ijlc1314
4楼-- · 2020-01-26 19:51
68336016 发表于 2013-10-5 15:48
WorkHookFunction_Table[ (( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus )) ...


谢谢!

WorkHookFunction_Table[ (( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus ))>0?g_tDevice.chFunction:0 ].fun();

试过写成这样子,但还是不行,如果加个局部变量就可以


uint8_t chIndex = (( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus ))?g_tDevice.chFunction:0;

WorkHookFunction_Table[ chIndex  ].fun();


这样就正常了
kanprin
5楼-- · 2020-01-27 00:36
按楼主的意思应该是想要这样:

(( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus )) > 0 ?WorkHookFunction_Table[g_tDevice.chFunction].fun():WorkHookFunction_Table[0].fun();

或者
uint8_t chIndex;
WorkHookFunction_Table[ chIndex  = (( SYS_HEAT == g_tDevice.chStatus )||( SYS_KEEP_PRE == g_tDevice.chStatus ))? g_tDevice.chFunction:0].fun();

按我的理解
作为数组下标,要么是立即数,要么有个中间变量(寄存器)。
楼主原来的写法类似于
WorkHookFunction_Table[].fun();
至于下标是什么,不晓得,也许是编译器给你随机分配一个数值,也许直接就不知道怎么执行了,应该跟编译器有关。



kanprin
6楼-- · 2020-01-27 04:32
原因应该就是,数组下标不像函数参数一样,编译器会给你分配空间来传递参数。

一周热门 更多>