#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
{}
}