Что это за странный формат кода C? - PullRequest
1 голос
/ 16 сентября 2008

Какое преимущество, если таковое имеется, обеспечивается форматированием кода 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 должно быть выполнено вручную.

Ответы [ 9 ]

25 голосов
/ 07 ноября 2008

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

9 голосов
/ 16 сентября 2008

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

8 голосов
/ 07 ноября 2008

Отступ, который вы видите, Стиль Уайтсмитов . В первой редакции Code Complete это описывается как «границы блоков начала и конца». Основной аргумент для этого стиля заключается в том, что в таких языках, как 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 , что почти равно K & R ).

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

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

IF test THEN
   oneThing;
   anotherThing
END
5 голосов
/ 16 сентября 2008

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

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

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

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

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

4 голосов
/ 16 сентября 2008

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

3 голосов
/ 16 сентября 2008

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

2 голосов
/ 16 сентября 2008

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

1 голос
/ 16 сентября 2008

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

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

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

1 голос
/ 16 сентября 2008

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

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