Использование if, else и else if - PullRequest
3 голосов
/ 19 сентября 2011

В чем разница между:

if      (expr1) {stmt}
else if (expr2) {stmt}
else if (expr3) {stmt}    
else            {stmt}

И тот же блок кода, написанный как:

if (expr1) {stmt}
if (expr2) {stmt}
if (expr3) {stmt}    
else       {stmt}

Ответы [ 7 ]

10 голосов
/ 19 сентября 2011

В первом каждый блок операторов является взаимоисключающим; структура гарантирует, что точно один из них будет выполнен.

Это не верно для второго. Рассмотрим:

if (a == 2) { /* blah */ }
if (a == 3) { /* blah */ }
if (a < 5)  { /* blah */ }

Если a == 2, то будут выполнены два блоков.

1 голос
/ 19 сентября 2011

Вот еще один хороший пример, чтобы увидеть, как это работает.

В этом примере будет напечатано «FirstSecond»:

if(1) {
    printf("First");
}
if(1) {
    print("Second");
}

Это просто печатает «First»:

if(1) {
    printf("First");
}
else if(1) {
    print("Second");
}
0 голосов
/ 19 сентября 2011

С:

if      (expr1) {stmt1}
else if (expr2) {stmt2}
else if (expr3) {stmt3}    
else            {stmt4}

Может быть выполнен один-единственный один операторов.


С:

if (expr1) {stmt}

if (expr2) {stmt}

if (expr3) {stmt}    
else       {stmt}

Либо оба, либо ни один из первого и второго разделов не будут выполнены. В последнем разделе if-else будут выполнены stmt3 или stmt4.

0 голосов
/ 19 сентября 2011

Например, если condition1 == true и condition2 == true, то первый блок (иначе идентификатор) будет выполняться только some statements#1, а второй блок будет выполнять и some statements#1, и some statements#2. Когда вы используете else, если программа перестает соответствовать следующим условиям после первого соответствия. Было бы немного быстрее во время выполнения, если условия являются исключительными (я не уверен, что это правильное слово).

0 голосов
/ 19 сентября 2011

Для лучшей производительности выберите if else (если возможно).

Вы также можете использовать оператор регистра переключателя.

0 голосов
/ 19 сентября 2011

В первом случае будет выполнен ровно один из блоков.Во втором случае первый или второй блоки могут выполняться или не выполняться, и будет выполнен ровно один из двух последних блоков.

0 голосов
/ 19 сентября 2011

В вашем первом коде может быть выполнено максимум ОДИН из блоков.

Во втором коде все блоки могут быть выполнены . (За исключением последней вещи.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...