Что это за странный формат кода C?
-
09-06-2019 - |
Вопрос
Какое преимущество, если таковое имеется, дает форматирование кода 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 в другом формате для сравнения!
Там, где я работаю, эта схема отступов используется для облегчения самодельного механизма складывания редактора.
Таким образом, я не вижу ничего принципиально неправильного в этом формате — в определенных разумных пределах форматирование — это вопрос личных предпочтений.