考虑以下代码:
// 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的值。确实如此,但不知怎的,&#34;? :&#34;运算符未向我提供预期结果 - 它不会将const_1*10
分配给var_2
,而是const_2*10
。当我在调试中移动并转到if语句时,我得到了预期的结果。那是为什么?
我在Windows 8.1上使用windriver workbench
修改
我将示例更改为可运行版本,并且如tkausl所述,问题是使用(var_1 == (enum_1 || enum_2))
而不是(var_1 == enum_1 || var_1 == enum_2))
答案 0 :(得分:4)
您不是要将var_1
与enum_1
进行比较,也不要将enum_2
与(enum_1 || enum_2)
进行比较,您可能需要(var_1 == enum_1 || var_1 == enum_2)
答案 1 :(得分:1)
enum1
为0,enum2
为1(默认情况下,如果您没有明确指定枚举值)。
So (var_1 == (enum_1 || enum_2))
评估为
(0 == (0 || 1))
,相当于
(0 == 1)
为0。
因此,正如您所观察到的,表达式将评估三元的第二部分。
您想要var_1 == enum_1 || var_1 == enum_2
吗?
答案 2 :(得分:1)
var_1 == (enum_1
|| enum_2)
enum_1
可能实现为0,enum_2
为1.因此
(enum_1 || enum_2)
基本上是(#include <stdbool.h>
的可读性)
(false || true)
因而true
,即 - 作为整数 - 表示为1
。所以
var_1 == 1
var_1
的值为enum_1
(可能为0) false 。
你想要
(var_1 == enum_1) || (var_1 == enum_2)
作为条件。