Вопрос

Какое преимущество, если таковое имеется, дает форматирование кода C следующим образом:

while(lock_file(lockdir)==0)
    {
    count++;
    if(count==20)
        {
        fprintf(stderr,"Can't lock dir %s\n",lockdir);
        exit(1);
        }
    sleep(3);
    }
if(rmdir(serverdir)!=0)
    {
    switch(errno)
        {
        case EEXIST:
            fprintf(stderr,"Server dir %s not empty\n",serverdir);
            break;
        default:
            fprintf(stderr,"Can't delete dir %s\n",serverdir);
        }
    exit(1);
    }
unlock_file(lockdir);

по сравнению с чем-то более типичным, например

while(lock_file(lockdir)==0) {
    count++;
    if(count==20) {
        fprintf(stderr,"Can't lock dir %s\n",lockdir);
        exit(1);
    }
    sleep(3);
}
if(rmdir(serverdir)!=0) {
    switch(errno) {
        case EEXIST:
            fprintf(stderr,"Server dir %s not empty\n",serverdir);
            break;
        default:
            fprintf(stderr,"Can't delete dir %s\n",serverdir);
    }
    exit(1);
}
unlock_file(lockdir);

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

Единственное преимущество, которое я вижу, — это просто отличаться от других и оставить свои отпечатки пальцев в написанном вами коде.

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

Это было полезно?

Решение

Соблюдая некоторые стандарты форматирования и комментирования, вы, прежде всего, показываете свое уважение другим людям, которые будут читать и редактировать написанный вами код.Если вы не принимаете правила и пишете какой-то эзотерический код, наиболее вероятным результатом будет то, что вы не сможете эффективно общаться с другими людьми (программистами).Формат кода — это личный выбор, если программное обеспечение пишется только вами и для вас, и никто не должен его читать, но сколько современных программ написано только одним человеком?

Другие советы

Верхний пример известен как «стиль Whitesmiths». Запись в Википедии о стилях отступов объясняет несколько стилей, а также их преимущества и недостатки.

Ничего.Отступы и другие стандарты кодирования являются вопросом предпочтений.

Отступ, который вы видите, Стиль кузнецов.Это описано в первом издании Код завершен как «границы блока начала и конца».Основной аргумент в пользу этого стиля состоит в том, что в таких языках, как C (и Pascal), if управляет либо одним оператором, либо блоком.Таким образом, весь блок, а не только его содержимое, должен отображаться подчиненным if-заявление с последовательным отступом.

XXXXXXXXXXXXXXX       if (test)
   XXXXXXXXXXXX           one_thing();

XXXXXXXXXXXXXXX       if (test)
   X                     {
   XXXXX                 one_thing();
   XXXXX                 another_thing();
   X                     }

Когда я впервые прочитал эту книгу (в 90-х годах), я нашел аргумент в пользу «границ блоков начала и конца» убедительным, хотя мне он не очень понравился, когда я применил его на практике (в Паскале).На языке C он мне нравится еще меньше, и его сложно читать.В конечном итоге я использую то, что Стив МакКоннел называет «эмуляцией чистых блоков» (Java-стиль Sun, что почти К&Р).

XXXXXXXXXXXXXX X      if (test) {
   XXXXXX                one_thing();
   XXXXXX                another_thing();
X                     }

Это наиболее распространенный стиль программирования на Java (чем я и занимаюсь весь день).Это также больше всего похоже на мой предыдущий язык это был «чисто блочный» язык, не требующий «эмуляции».Однооператорных тел нет, синтаксису структуры управления присущи блоки.

IF test THEN
   oneThing;
   anotherThing
END

Мне это кажется довольно стандартным.Единственное личное изменение, которое я бы сделал, — это выравнивание фигурных скобок с началом предыдущей строки, а не с началом следующей строки, но это всего лишь личный выбор.

В любом случае, стиль форматирования, который вы рассматриваете, является стандартным для C и C++ и используется потому, что он облегчает чтение кода, и, в частности, глядя на уровень отступов, вы можете сказать, где вы находитесь. вложенные циклы, условные выражения и т. д.Например.:

if (x == 0) 
{
  if (y == 2)
  {
    if (z == 3)
    {
       do_something (x);
    }
  }
}

Хорошо, в этом примере довольно легко увидеть, что происходит, но если вы поместите много кода в эти операторы if, иногда может быть трудно определить, где вы находитесь, без последовательных отступов.

В вашем примере посмотрите на позицию оператора выхода (1) - если бы он не был с таким отступом, было бы трудно определить, где это было.На самом деле вы можете сказать, что это конец большого оператора if.

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

Форматирование кода — это личный вкус.Пока его легко читать, за его обслуживание придется платить!

Это просто еще один стиль — люди пишут код так, как им нравится, и это один из общепринятых стилей (хотя я не предпочитаю его).Я не думаю, что у него есть какой-то недостаток или преимущество перед более распространенным стилем, в котором скобки не имеют отступов, а код внутри них.Возможно, это можно оправдать, сказав, что это более четко разграничивает блоки кода.

Чтобы этот формат имел «преимущество», нам действительно нужен эквивалентный код C в другом формате для сравнения!

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

Таким образом, я не вижу ничего принципиально неправильного в этом формате — в определенных разумных пределах форматирование — это вопрос личных предпочтений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top