Рассмотрим этот код:?: Непредвиденное поведение - хотя условие верно,? часть не выполняется
// 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, я получаю ожидаемый результат. Почему это?
Я использую WinDriver верстак на окнах 8.1
EDIT
Я изменил пример к работоспособным версиям, и как уже упоминались tkausl, проблема была с помощью (var_1 == (enum_1 || enum_2))
вместо (var_1 == enum_1 || var_1 == enum_2))
Вы хотите создать [___MCVE___] (http://stackoverflow.com/help/mcve)? –
'(enum_1 || enum_2)' создает bool. –
ваше сравнение неверно. проверить ответ @tkausl –