2016-03-10 5 views
0

Я столкнулся с кодом, в котором enum переменная отлита до enum. Я не могу понять, что такое литье. Для Е. g.Переменная переливания для перечисления типа перечисления

typedef enum{x,y,z} en; 

void main(){ 
    en const v; 
    switch(v){ 
    case (en)y : { 
    } 
    break; 
    case (en)x: { 
    } 
    break; 
    default : { 
    foo(); 
    } 
    break; 
    } 
} 

Что такое использование литья x или y к enum типа, который в случае этикетки (en)x?

+1

Я предлагаю не делать этого, поскольку это может фактически * скрыть * ошибки, которые в противном случае были бы найдены (с высокими предупреждениями компилятора). –

+0

Какую ошибку это может скрыть? Не могли бы вы объяснить? –

ответ

3

Такой код является симптомом чистой паранойи, вот и все. На самом деле, возможно, это вредно, так как при форсировании актера вы намекаете на компилятор, что знаете, что делаете, чтобы он не предупредил вас об ошибочном ярлыке case.

switch Выполнение непосредственно на enum совершенно справедливо, так как enum s являются по существу целыми типами. Вы можете спокойно сбросить (en) отливки.

+0

Спасибо !!!! Я придерживался того же мнения, но вопрос в том, что кто-то использовал его, что позади, или мы говорим, что это ошибка программиста. Также C-стандарт говорит что-то о том же. –

Смежные вопросы