Как осуществляется неявное преобразование целочисленных типов?

Следующий код не проходит проверку MISRA. Конкретное сообщение об ошибке:

(MISRA-C:2004 10.1/R) Значение выражения целочисленного типа должно не может быть неявно преобразован в другой базовый тип, если он не преобразование в более широкий целочисленный тип того же знака

typedef enum _MyEnum { One, Two } MyEnum;
MyEnum MyVariable;

int foo(void)
{
    int result = 1;

    if (One == MyVariable)  // fails here with MISRA-C:2004 10.1/R
    {
        result = 2;
    }    
    return result;
}
  • Почему логическое выражение преобразуется?
  • Что здесь преобразовано?
  • Почему код проходит проверку MISRA, когда я меняю местами Oneи MyVariable?

Изменить: Компилятор представляет собой компилятор TI "MSP430 C/C++ Compiler v4.0.0" с включенной проверкой правил MISRA.

5
задан harper 14 May 2012 в 14:09
поделиться