LINUX.ORG.RU

Скобочки в C


0

2

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

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

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

★★★★

Открывающая и закрывающая должны быть на доном отступе

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

K&R думали иначе.

А вообще, с какого конца лучше бить яйцо: с тупого или с острого?

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

тогда были маленькие терминальчики а сейчас можно простыню текста вывести

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

Да знаю я. Но ты не ответил на мой вопрос о яйце ) Так с какого конца надо бить?

LongLiveUbuntu ★★★★★ ()

это твое имхо.

у меня лично первый вариант тошнотики вызывает, а еще и если вот такой:

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

// слышится топот, хлопок дверью туалета и сдавленные звуки извержения содержимого желудка

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

так пишут дибилойды.

пацаны пишут так

if (i + 1 == n)
    break;

:D :D :D или так

if ( i + 1 == n ) {
    DEBUG("%n %n", i, n);
    break;
}

Блок и так уже выделен табуляцией, выделяя его ещё и лишней
строкой со скобкой, ты тупо уменьшаешь кол-во кода влезающего
на экран, ни фига не получая взамен. 
Хочется выделить функциональный блок, выдели его пустой строкой.
system_call("Ahtung");

if ( i + 1 == n ) {
    DEBUG("%n %n", i, n);
    break;
}
anonymous ()
Ответ на: комментарий от LongLiveUbuntu

Без понятия, яйца не ем ни в каком виде. А вот в первом варианте имхо сразу видно, сколько инструкций выполняется в if'е.

WRG ★★★★ ()

Второй вариант читабельнее.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от LongLiveUbuntu

С обоих, а потом выпиваешь. Чо как немужик спрашиваешь ?

anonymous ()

K&R/BSD KNF style

Те кто использует другой стиль должны программировать на Питоне. Или гореть в аду, например

anonymous ()

Юзаю

if (i + 1 == n) break;
, ибо условие выхода из цилка должно быть компактным и прозрачным, раз уж приходится располагать его в теле цикла.

Sadler ★★★ ()

Когда один оператор:

if (i==88)
    break;
Со скобочками:
if (i==88) {
    i++;
    break;
}

Делаю так же и во всяких джаваскриптах.

ktan ★★★ ()

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

Если пишешь свой код, то выбирай тот вариант, на который смотреть приятнее. Если пишешь код в чужой проект, там уже есть правила, следуй им.

i-rinat ★★★★★ ()
if i + 1 == n:
    break
anonymous ()

Первый стиль называется стилем Аллмана. Почитай, кто такой Эрик Аллмана и вопросы что лучше, сами отпадут.

crowbar ()

Мне за строки кода не платят, использую второй вариант.

Miguel ★★★★★ ()

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

ога..ещё расскажи про отступ табами(или пробелами) и категоричный выбор vim/emacs ;-) Флейм будет побольше - потешишь ЧСВ

MKuznetsov ★★★★★ ()

В текущем проекте по стандарту первый вариант, на предыдущей работе был принят второй вариант, так что пофиг. Один раз написал правила для astyle, а потом если что, то gg=G.

Это для си/крестов. В перле почему-то привык юзать второй вариант всегда:

sub print_chlen {
    print "chlen\n";
}
DELIRIUM ★★★★★ ()
Последнее исправление: DELIRIUM (всего исправлений: 1)

Правильнее так, как принято в проекте.

Мне больше нравится вариант:

if (i + 1 == n)
  break;

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

Legioner ★★★★★ ()

Настрой в своём редакторе автоформатирование и не парь мозг себе и окружающим.

Я открывающей скобочке лишнюю строчку не выделяю.

PolarFox ★★★★★ ()

Код вида

if (i + 1 == n)
  break;
Пишут извращенцы. Чуть надо что-то добавить тут же приходится скобочки вставлять по новой и визуально код никак не связан с условием, не питон чай.

Deleted ()

Первый вариант вообще не нужно использовать, за исключением может быть блока ф-ий и каких-нибудь забористых if'ов с многострочным условием. Для break лучше подходит вариант без { }

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

Код ... пишут извращенцы. Чуть надо что-то добавить тут же приходится скобочки вставлять по новой

Лорчую. Если код находится в разработке, слежение за скобочками только отвлекает. Сразу поставил — и больше не паришься.

d ★★★ ()

Для себя пишу в K&R, ибо есть только 1TBS и K&R пророки его. На работе принят первый вариант, ибо в добавок к отступам блок выделяет ещё и визуальная линия по скобкам. Не вижу ничего плохого в нём.

И всегда пишу скобки даже для однострочных условий. И много пустых линий. Потому что единообразие и разбиение на блоки. У меня есть знакомый, который настолько ненавидит скобки, что почти везде не то, что их не пишет в однострочных блоках, а даже специально записывает эти блоки с помощью запятой, чтобы превратить многострочный блок в однострочный и не писать б-гомерзкие скобки.

Ах да, K&R-ребята-египтяне, а как вы пишете else?

if (foo) {
    bar();
} else {
    hux();
}
или
if (foo) {
    bar();
}
else {
    hux();
}
(Я за второй вариант.)

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

1-й вариант правильней, во втором связи if и else нет. (ну и выглядит угрёбищно).

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

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

[code=ruby]break if n == i + 1[/code]
use Ruby, bro

last if $n == $i + 1;

Or Perl. Так ещё можно выходить сразу из нескольких вложенных циклов.

KennyMinigun ★★★★★ ()

Не знаю почему, но на С я пишу по первому варианту, а на java по второму. Давняя необъяснимая привычка.

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

А я за первый. Для меня во втором смысл K&R пропадает. А ещё

try {
    something();
} catch (e) {
    log(e);
} finally {
    finalize();
}

KennyMinigun ★★★★★ ()

Какой смысл в лишней скобки? Писать надо так:

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

Kuzy ★★★ ()
Ответ на: Раз уж такая пьянка от KennyMinigun

JPEG, only JPEG! Пробелы. Табы могут вызвать разезжание кода при других настройках размера табуляции. Пробелы никогда такой подлянки не выкинут. «Нарушается семантика отступов» — мне и компилятору пофиг. «Но мне не нравится отступ в четыре пробела, я хочу два» — s/ / /g и не ной.

И это мы ещё не касались количества пробелов в отступе.

Ах да, ещё!

for (int i = 0; i < n; i++)
или
for (int i = 0; i < n; ++i)

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

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

Не могут.

Можно еще обсудить пробел между скобкой и словом. for ( VS for(.

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

Пробелы никогда такой подлянки не выкинут

враньё же. В редакторе может быть не моноширинный шрифт.

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

Только 4 пробела, никаких табов!!один

А ещё:

if (1) {
    n += 1;
}

vs

if (1){
    n+=1;
}

Ну и вариации..

anonymous ()

Давно уже замечено, что если язык начинается на букву С, то думать о скобках, пробелах, прописных/заглавных буквах довольно бессмысленно - всё равно выходит сплошной самоповторяющийся шум из девяностых с необходимостью описывать одну мысль семью строками в разных местах кода.

Какая читабельность, о чём вы говорите вообще
?

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

В редакторе может быть не моноширинный шрифт.

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

Единственный момент, когда это может вызвать разезжание, это когда

for (uiouiouiouiouiouio) {
    if (fgsfdsfgsfdsfgsfdsfgsfds &&
        asdasdasdasdasdasdasdasd ||
        xyzxyzxyzxyzxyzxyzxyzxyz)
    {
        // ...
    }
}
тогда asda и xyz оказываются чёрт знает где. Как тут помогут табы? Даже если if и первые четыре пробела перед asd будут на одном уровне, остальные четыре же не будут равны по ширине строке «if (». Разве что редактор в курсе языка, на котором записан код, и правильно всё расставит.

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

В дргуих ЯП у вас получается не «сплошной самоповторяющийся шум»?

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

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


if (i + 1 == n)
{   code();
    code();
    code();
    break; }

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

Открывающая и закрывающая должны быть на доном отступе

а не то compilation error?

Автору - пиши как нравится. Tastes differ.

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

С таким подходом преимущество табов становится очевидным.

Kuzy ★★★ ()
Ответ на: Раз уж такая пьянка от KennyMinigun

Моя клавиатура, мышка, стол залиты жиром, который напором бъёт прямо из монитора. Ковёр заляпан, нет - залит! Я бегу на кухню за тазиком, хватаю в придачу все ёмкости, которые у меня есть и бегу назад. Забегаю в комнату, а там уже по щиколотки жира! Я с трудом переставляю ноги и пытаюсь спасти дорогую электронику, но уже поздно! Что делать!? У меня паника! Надо звонить 911!!!111

nanoolinux ★★★★ ()
//кручу пальцем у виска
if (i + 1 == n)
{
    break;
}
//кручу пальцем у виска
//я дебил
if (i + 1 == n)
    break;
//я дебил

fxd.

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