【发布时间】:2016-06-22 11:31:16
【问题描述】:
考虑这段代码:
// Example program
#include <stdio.h>
typedef enum{
enum_1,
enum_2
}my_enum;
/*
* this is not how the function works but when I debug
* it will always returns enum_1 (verified when using the debugger)
* so I hope this is enough
*/
int fun_1(int arg_1){return enum_1;}
const int const_1 = 10;
const int const_2 = 20;
int main()
{
int arg_1 = 0;
int var_1 = fun_1(arg_1);
int var_2 = (var_1 == (enum_1
|| enum_2))
? const_1*10 // I expect this result
: const_2*10; // instead I get this. why?
printf("%d\n" , var_2);
if(var_1==enum_1)
var_2 = const_1*10; // here it works fine
printf("%d\n" , var_2);
return 0;
}
我正在调试这段代码,预计 var_1 会得到 enum_1 的值。确实如此,但不知何故,“?:”运算符没有给我预期的结果——它没有将const_1*10分配给var_2,而是const_2*10。当我在调试中继续前进并转到 if 语句时,我得到了预期的结果。这是为什么呢?
我在 Windows 8.1 上使用 windriver 工作台
编辑
我将示例更改为可运行版本,正如 tkausl 所述,问题在于使用 (var_1 == (enum_1 || enum_2)) 而不是 (var_1 == enum_1 || var_1 == enum_2))
【问题讨论】:
-
你介意创建一个MCVE吗?
-
(enum_1 || enum_2)产生一个布尔值。 -
你的比较是错误的。检查@tkausl 的答案
标签: c if-statement operators