c - 为什么我不能将C代码中逻辑表达式的返回结果存储到变量中?

标签 c gcc arm

我有一小段 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/

相关文章:

c - GCC - 初始化程序周围缺少大括号

assembly - BIC指令

c - 距离传感器测距误差估计

c - 如何在 C 中对结构体执行选择排序?

windows - 在调用 asm 函数之前在 C 中调用 printf 或不调用的神秘副作用?

assembly - ARM 汇编十六进制乘法

c++ - 如何使用MingW for Windows为Arm处理器编译程序?

c - 打印字符串数组并忽略空值

c - 未加前缀的字符串文字是否与带前缀的字符串文字连接?

C++11 字符串属性和 gcc 版本