Отличаются ли эти коды?

#c #optimization #coding-style

#c #оптимизация #стиль кодирования

Вопрос:

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

Итак, мне было интересно, отличаются ли эти два кода или они компилируются до одного и того же, и в чем было бы преимущество одного перед другим.

 if(a > b amp;amp; b >c)
{}

if(a > b)
{
    if(b > c)
    {} 
}
  

Ответ №1:

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

Первый короче, второй, возможно, удобнее переходить в отладчике (отладчики перешагивают через код построчно).

Комментарии:

1. Отладчикам не обязательно выполнять пошаговое выполнение кода построчно, например, я прекрасно могу выполнять несколько вызовов методов в C . Иногда это даже немного раздражает. Кроме того, отладчики C # обычно разбивают строки кода в соответствии с их фактическими точками последовательности. Я полагаю, что существуют отладчики C / C , которые имеют ту же функцию (по крайней мере, в отношении завершенных инструкций)

2. @sehe: Да, вы можете перейти в , но обычно не переступаете .

3. @Skeith: перечитайте ответ или перейдите к skeptics.stackexchange.com , english.stackexchange.com или начните «экзистенциальное сомнение» с area51 🙂

Ответ №2:

Я думаю, что второй пример создает дополнительную ветвь.

Комментарии:

1. Как вы думаете, оценка короткого замыкания работает без ветвей?

2. Что вы имеете в виду под дополнительной ветвью?

Ответ №3:

 if(a > b amp;amp; b >c)
{}

if(a > b)
{
    if(b > c)
    {} 
}
  

Они одинаковы ….

Ответ №4:

Технически они одинаковы. Однако второй стиль понятнее, если у вас есть соответствующий оператор «else». Самое главное, что разные группы имеют разные соглашения о стиле кода, и вы, возможно, захотите придерживаться конкретного, используемого вашей командой.

 if(a > b amp;amp; b >c)
{}
else if(a > b)
{}

if(a > b)
{
    if(b > c)
    {}
    else
    {}
}