请教个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条回答
ijlc1314
1楼-- · 2020-01-27 10:16
 精彩回答 2  元偷偷看……
wxty
2楼-- · 2020-01-27 13:11
WorkHookFunction_Table[ (uint8_t) ( ((SYS_HEAT == g_tDevice.chStatus )||(SYS_KEEP_PRE == g_tDevice.chStatus ))?g_tDevice.chFunction:0 ) ].fun();
这样呢?亟待高手解释。
ijlc1314
3楼-- · 2020-01-27 14:54
wxty 发表于 2013-10-5 17:55
WorkHookFunction_Table[ (uint8_t) ( ((SYS_HEAT == g_tDevice.chStatus )||(SYS_KEEP_PRE == g_tDevice.c ...

这样运行结果也是错的
wxty
4楼-- · 2020-01-27 19:05
ijlc1314 发表于 2013-10-6 08:18
这样运行结果也是错的

条件 ( (SYS_HEAT == g_tDevice.chStatus )||(SYS_KEEP_PRE == g_tDevice.chStatus) ) 始终为假! 为何?

一周热门 更多>