请教个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是一个函数指针数组
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
kanprin
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();
至于下标是什么,不晓得,也许是编译器给你随机分配一个数值,也许直接就不知道怎么执行了,应该跟编译器有关。



一周热门 更多>