我有一小段 C 代码的奇怪行为。 我想将 bool 表达式的结果存储在变量中,但它似乎不起作用。
代码如下:
#define rtCP_Constant_Value_fklq (uint8_t) 1 //Simulink const
#define rtCP_Constant_Value (uint8_t) 0 //Simulink const
uint16_t rtb_tobit;
volatile unsigned char rtb_y;
uint8_t asr_ena_=14;
rtb_tobit = (1 << rtCP_Constant_Value_fklq);
uint8_t temp = ((uint8_t)rtb_tobit) & asr_ena_;
rtb_y = (temp !=(rtCP_Constant_Value));
我已经在 Nucleo 评估板上使用两个编译器 Renesas SH 9_4_1 和 gcc-arm non-eabi 测试了这段代码。
在它们中,变量 rtb_y
始终为零。
调试器显示表达式 (temp !=(rtCP_Constant_Value))
为真,但我不明白为什么变量 rtb_y
始终等于零。
谁能解释一下为什么?这种奇怪的行为是因为我使用的 C 标准吗?
最佳答案
按照您使用宏的方式使用宏是一个非常糟糕的主意。一般来说,您需要非常小心,在正确的地方使用括号。你也不应该包括;在宏中。例如,这样更好:
#define rtCP_Constant_Value_fklq ((uint8_t) 1) //Simulink const
但是,实际上不可能为您的问题提供比这更多的帮助,因为由于包含 ;,您的示例将无法编译。如果您使用可编译的代码更新问题,可能会提供进一步的帮助。
关于c - 为什么我不能将C代码中逻辑表达式的返回结果存储到变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447929/