三元运算下的执行语句使用NULL空指针的报错
在串口的接收中断中
三目运算:判断后执行1:校验数据帧,然后发送一字节的数据;或者执行2:NULL NULL的宏定义为:#define NULL ((void *) 0)
但是会出现一个报错如图。
具体代码不给,空说没用。你使用空指针,也不说咋用的。
@Xmao:
回答问题:这个是警告,应该没啥关系,警告提示可能会触发的错误,如果不是你写的,就无视吧。从你的代码和窗体来看你应该使用的是keil
进行单片机编程,抱歉我对这方面的认知比较少无法回答,虽然我也学过。我的见识短浅,没见过这样用3目运算符的。我拿到VS
看看可不可以用,长见识了。但是发现这样写其实没啥意义,就是占个空子,感觉不如if
直观。
不知道这个是不是你点的反对。如果不是的话就无视后面的:题目没说明白,说了句实话,心里就不爽了,哪有这样对待想要帮助他人的人的?
@寂静的羽夏: 不知道谁 -1 ,我帮你加回来了 :)
@韆: 感谢老哥支持。
能否先把完整代码给一下
(Rs422_SendFlag)?(Rs422_SendFlag=0,Rs422_CalData(Rs422SendData),Uasrt_SendByte(Rs422SendData[0])):(NULL);//校验+发送一个数据
/* 串口0中断服务子程序 */
void UART0_ISR() interrupt 17
{
unsigned char temp;
static unsigned char i;
UART_INT_FLAG_CLR;//清除UART0中断标志
if ((UART_STATE & UART_RI))
{
temp = UART_BUF;
UART_STATE &= ~UART_RI;//清除接收中断标志位
Rs422RecData[Rs422_RecAddr] = temp;
if(Rs422_RecAddr<=3)
Rs422_CheckHead();
else
Rs422_RecAddr++;
if(Rs422_RecAddr==16)
{
Rs422_RecAddr=0;
Rs422_RecFlag=1; //接收完成
Rs422_CheckData(); //检查
(Rs422_SendFlag)?(Rs422_SendFlag=0,Rs422_CalData(Rs422SendData),Uasrt_SendByte(Rs422SendData[0])):(NULL);//校验+发送一个数据
}
}
if((UART_STATE & UART_TI))
{
UART_STATE &= ~UART_TI;//清除发送中断标志位
/*task*/
Rs422_RecAddr=0;
Printf_CpltFlag=1;
(i<=15)?(Uasrt_SendByte(Rs422SendData[i]),i++):(i=1);
}
}
@Xmao: 我的答案给你了。防止你看不到就特地at了你一下。
@寂静的羽夏: 对于代码的优化和阅读上更简洁,使用太多的if else 会导致代码行数过多显得臃肿
@Xmao: 毕竟是权衡问题,不过三目运算符里含有多个表达式代码读起来就恶心。