LINUX.ORG.RU

Скобочки в C


0

2

Поясните пожалуйста за оформление кода. Я привык делать вот так

//какой-то код
if (i + 1 == n)
{
    break;
}
//какой-то код
даже когда в скобочках один оператор, имхо вот так
//какой-то код
if (i + 1 == n){
    break;
}
//какой-то код
будет нечитабельное гумно, особенно если большой уровень вложения.

Как всё таки правильнее? Или может вобще правильнее такие конструкции без скобочек и в одну строку писать? Хочу услышать мнение лоровцев.

★★★★

Ответ на: комментарий от ilammy

У пропорциональных шрифтов изменяется ширина пробела в зависимости от строки? О_О

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

Как тут помогут табы?

Речь чуточку о другом. Какое бы правило обратотки табов не выбрал, разработчикам всё равно придётся выбирать подходящий редактор и правильно настраивать работу с табами. В частности, настройка редакторов для правильной замены табов на пробелы не везде тривиальная и чаще значительно сложнее выбора размера таба.

Замена на пробелы не делает жизнь ощутимо лучше. Вместо проблемы с одинаковым отображением у любого пользователя появляется небольшой гемор с редактированием кода. Редакторы не в состоянии спрятать все проблемы с табами.

mashina ★★★★★
()

Как всё таки правильнее?

Правильно так, как принято в гайдлайнах на стиль оформления кода для текущего проекта или компании.

andreyu ★★★★★
()
Ответ на: комментарий от mashina

В частности, настройка редакторов для правильной замены табов на пробелы не везде тривиальная и чаще значительно сложнее выбора размера таба.

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

небольшой гемор с редактированием кода

Какой же?

ilammy ★★★
()
Ответ на: комментарий от ilammy

А для работы с пробелами вообще ничего нельзя не надо настраивать и выбирать.

Ну конечно, сказочник. Минимум нужно указать, что вместо \t нужно печатать указанное кол-во пробелов.

mashina ★★★★★
()
Ответ на: комментарий от ilammy

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

mashina ★★★★★
()

Как всё таки правильнее?

Вопрос не верный.

aedeph_ ★★
()

Второй приятнее, но в говнокрестах конструкторы будут выглядеть убого:

struct Foo {

  Foo(...) : foo(a), bar(b), ... {
  }
};
anonymous
()
Ответ на: комментарий от anonymous

K&R подразумевает, что для функций открывающая скобка всё же переносится на следующую строку.

ilammy ★★★
()
//какой-то код
if (i + 1 == n) {
    break;
}
//какой-то код
makeB
()
if (i + 1 == n)
{
    break;
}

Лично по мне так хоть код и размазывается в высоту, но читабельность на порядок выше чем у K&R варианта.

Dron ★★★★★
()
Ответ на: комментарий от u283

Лучше не надо, так по моему, дополнение кода, или правка оного или просто разрастание кода в геометрической прогрессии или неопределённость у стороннего человека забыли поставить? Или так и должно быть? Лучше использовать полный синтаксис, и все эти вопросы и проблемы отпадут.

Или если уж реально смысла нет то конечно можно и наверное нужно слать скобки в таком случае нафиг.

Но я лично приучил себя вшпиливать их везде где они должны быть. Убирает напрочь неопределённости и разграничивает код.

Dron ★★★★★
()

Первый вариант, т.к. нет больше смысла экономить место.

geometer
()

Как в проекте принято, так и правильно, ибо сколько человек, столько и мнений.

особенно если большой уровень вложения

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

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Возможно вы и правы. Думаю, стоит попробовать писать некоторое время во втором варианте и посмотреть на результат. в принципе, код из coreutils в таком стиле читается достаточно легко, может я и не прав насчет второго варианта. Хотя читаемость достигается не только да счет скобок...

WRG ★★★★
() автор топика
Ответ на: комментарий от Kalashnikov

хах, это типа «i стремится к 0») очень семантично)

zarkone ★★
()
Ответ на: комментарий от BambarbiyaKirgudu

Ты с какого раёна, чёрт.

anonymous
()
Ответ на: комментарий от ilammy

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

anonymous
()
Ответ на: комментарий от anonymous

программировать на Питоне. Или гореть в аду

А разница? ;)

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

//какой-то код
if (i + 1 == n) {
    break;
}
//какой-то код

shell-script ★★★★★
()
Ответ на: комментарий от WRG

Значит делай, как велит тебе твоя левая пятка :) А кто возмутится - дежурный комбобрекер «тут так принято» - и вопросов нет.

slackwarrior ★★★★★
()
Ответ на: комментарий от quest

Раз уж есть тред про оформление кода, то как оформить

........
if (condition1 && condition2 && condition3 && condition4) {
    doSomething();
}
........
если все условия в одной строке слишком длинно?

WRG ★★★★
() автор топика
Ответ на: комментарий от WRG
bool condition12 = (condition1 && condition2);
bool condition34 = (condition3 && condition4);
if (condition12 && condition34) {
    doSomething();
}

Ну ты понел.

С арифметикой или там логическими флагами ещё может прокатит перенос на следующую строку, но эти двойные логические связки уж сильно уродливо выглядят что спереди, что сзади:

if (condition1 && condition2 &&
    condition3 && condition4)
{
    doSomething();
}

if (condition1 && condition2
 && condition3 && condition4)
{
    doSomething();
}

if (condition1 && condition2
    && condition3 && condition4)
{
    doSomething();
}

ilammy ★★★
()
Ответ на: комментарий от WRG
if
(
    condition1 &&
    condition2 &&
    condition3 &&
    condition4
)
{
    doSomething();
}
quest ★★★★
()
Ответ на: комментарий от nanoolinux

Что делать!?

Проблема вот в этом:

Я бегу на кухню за тазиком

Ибо уже бесполезно за Ним бежать и кастовать Его, он уже не наш Господь, Его нет.

another ★★★★★
()
Ответ на: комментарий от ilammy

Что первый, что второй вариант - лютый нечитаемый песец.

drull ★☆☆☆
()
Ответ на: комментарий от ilammy

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

Перестань использовать 10" монитор.

drull ★☆☆☆
()

ИМХО первый вариант читабельнее. K&R экономили место на экране, потому и придумали такой вырвиглазный стиль. Но если в твоей команде он принят, то лучше придерживаться его.

drull ★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.