LINUX.ORG.RU

C, if

 


0

1

Почему сишники пишут if-ы вот так?

if (!(words = (char**) realloc(words, size*sizeof(char*)))) {



Почему не в 2-3-4 строчки? Компилятору совершенно всё равно, человеку куда более читаемо. Это что, понты или наоборот хороший тон(в чём хороший тогда)?

★★★★★

Стараются в 80 символов поместиться, может быть.

Korchevatel ★★★★★
()
Последнее исправление: Korchevatel (всего исправлений: 1)

Может не так выразился, совсем вырвиглазного примера не нашёл, но это можно увидеть в сорцах любого oss-софта. Тут главное - присвоение в условии if (от чего у меня просто глаз дёргается) и вызов функции там же. Это кулхацкерство или в этом что-то есть правильное?

yu-boot ★★★★★
() автор топика

Потому что они могут. Питонщики вон так этому обзавидовались, что аж целый := придумали.

PolarFox ★★★★★
()
Ответ на: комментарий от yu-boot

Это кулхацкерство или в этом что-то есть правильное?

Нет. Это оптимальная «обработка исключения». Можно и по другому, но простота ценится больше.

anonymous
()

Почему не в 2-3-4 строчки?

Потому что читать учатся сперва по буквам, потом - по слогам, потом - по словам, потом читают по абзацам и по диагнали (используя продвинутые способности распознавания образов нейронных сетей).

Поэтому начинающие обычно выделяют каждую букву: if на отдельной строке, { на отдельной строке, «hello world» на отдельной строке, } - на отдельной строке. Круто - написали большую программу из 1000 строк (букв).

С ростом способностей в распознавании образов, начинают уменьшать линейные размер кода (по длине и ширине), чтобы сразу распознать основной смысл. И основной смысл в твоем куске кода words = realloc(words, size*sizeof(char*))

anonymous
()

это стандартный способ уменьшения области видимости переменной не специфичный для C, но для realloc() это пожалуй не столь актуально

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

это стандартный способ уменьшения области видимости переменной

В каком месте ты тут увидел объявление переменной?

wandrien ★★
()

Почему не в 2-3-4 строчки? Компилятору совершенно всё равно, человеку куда более читаемо. Это что, понты или наоборот хороший тон(в чём хороший тогда)?

Понты хакеров. Им «красиво». В серьёзной разработке за такое бьют по рукам сначала на ревью, а если пропустили на ревью, то на аудите безопасности.

Тут, кроме всего прочего, еще и утечка памяти в случае, если аллокация не удалась. Правильно:

char **new_words = (char **) realloc (words, size * sizeof (char *))
if (!new_words) {
wandrien ★★
()
Ответ на: комментарий от wandrien

утечка памяти в случае, если аллокация не удалась

Так. Аллокация не удалась! Каким же образом память утекла?

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

Тут, кроме всего прочего, еще и утечка памяти в случае, если аллокация не удалась.

По этому куску нельзя говорить про утечку памяти.

anonymous
()

тут одно мажорное «действие» выполняетcя, что тут писать на несколько строчек?

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

По этому куску нельзя говорить про утечку памяти.

My bad, надо было написать «скорее всего».

Мы не видим весь код, но с вероятностью >50% остальной код сделан так, старое значение words утекает. Типовая ошибка.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от wandrien

man realloc

Да. По дибильному сделано. Не обращал внимание на это.

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

но с вероятностью >50%

Эта оценка из разряда «какова вероятность встретить динозавра?»

anonymous
()

Почему сишники пишут if-ы вот так?

Потому, что говнокод и выпендрёж, к тому же с утечкой памяти как писали выше. Вычитали, что так можно и впихивают куда не попади. Есть ещё:

void CopyString(const char *dst, const char *src)
{
	while (*dst++ = *src++);
}

Оно хотя бы работает.

X512 ★★★★★
()

напиши красивый вариант, а то проблемы не вижу

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

Этанольный код на си в файле cpp все что нужно знать

st4l1k ★★
()

с позиций ленивой человекочитаемости код не очень, конечно. Не криминал, но так себе.

С позиций человекописаемости так проще.

Код стайл проекта это компромисс между интересами пишущих и читающих. Если читающих ничего не смущает, то и кому какое дело.

Читают код обычно те люди, которые вовлечены в проект. Интересы мимокрокодилов не учитываются.

Хотя лично я за предельную простоту. Одна строка - одна операция. Высокая концентрация разного рода действий и абстракций на единицу кода приносит гораздо больше вреда, чем пользы. По факту. Если просуммировать затраты на написание, ревью, отладку, тестирование, эксплуатацию и сопровождение.

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

23279 lines (19970 sloc) 863 KB

Практически роман в стихах. Только не в стихах. И не роман.

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

Это просто шедевр и главное работает железно.

XDD

А попробуй отрефакторить, всё развалится. Знаем, доводилось такое вычищать.

wandrien ★★
()
Последнее исправление: wandrien (всего исправлений: 1)

А с чего вдруг в 2-3-4 строчки более читаемо? Так всё сразу в одном месте решается, а размазывать по строкам - читать и воспринимать смысл дольше и сложнее.

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

OpenSyobonAction

Там игра мало того издевается над игроком, так ещё и сорцы тоже?

a1batross ★★★★★
()

Сейчас почему-то стало модно писать «красивый, читаемый код для команды». Меня недавно на работу не взяли с аргументом «делает упор скорее на рабочий код, чем удобочитаемый в сеттинге с командой».

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

Хотя, в той же википедии написано, что метриками software quality являются: reliability, efficiency, security и на последнем месте maintainability. Вот тоже, поддерживать этот код будет домохозяйка или инженер профессионал?

В K&R довольно вырвиглазный код с точки зрения хаусмилфы, а писали эту книгу инженеры для инженеров.

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

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

В каком месте ты тут увидел объявление переменной?

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

так что придирка не уместна

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

если это фрагмент одной функции, которая делает динамический ресайз массива, то что мы сэкономили? две строчки?

если же динамический ресайз размазан по всему коду, то это плохая практика, противоречащая принципу DRY.

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

Не вводи в заблуждение. Оно только появилось. И ломает дизайн языка при этом.

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

практика показывает, что write only код - это очень дорого. это допустимо лишь тогда, когда пишется прототип или мелкая одноразовая фигня.

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

Всему свое время и место.

olelookoe ★★★
()

Это что, понты или наоборот хороший тон(в чём хороший тогда)?

свой вариант: это плохой тон :)

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

свой вариант: это плохой тон

Ну так судьба сама велит (это ж ни какой-нибудь непонятный форум, это ж ЛОР)!

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

Ну да, присвоение в if. А как по другому, если нет исключений?

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

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

Ну да, присвоение в if. А как по другому, если нет исключений?

А вот смотри. Сначала будет присвоение, а потом сравнение. В машкодах if, циклов и т.п. физически нет, там if-goto только, даже без else. Это сведётся к одной и той же последовательности команд в бинарнике. В чём разница?

yu-boot ★★★★★
() автор топика

Почему сишники пишут if-ы вот так?

Это не «сишники», это школьники. Пример - эталонный говногод.

LamerOk ★★★★★
()
Ответ на: комментарий от yu-boot

Да так почти никто и не пишет. С этим достаточно один раз разобратся, чтобы потом узнавать такую конструкцию.

Кстати, получается что строчка и блок на присваивание. А если внутри иф то блок на присваивание. Может второй вариант даже лучше.

zerhud
()
Ответ на: комментарий от yu-boot

В чём разница?

В том, что автор - малолетний дебил, работающий через IDE в окошке 5х5 символов, и пытающийся «сэкономить» строчки.

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

Не надо ударяться в крайности. Тут нет ни говнокода ни write only и про данные явления речи не было ни в ОП ни у меня. ТС привел код, который пишет инженер, который учился по классическому учебнику Си. Для домохозяйки / щегла с 3х месячных курсов этот код может быть непонятен, но это его проблемы, как я уже сказал. Попросим таких из професии и будет меньше подобных тредов.

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

Хм, да, действительно..

Просто обычно приведение типов скобочками называют приведением в стиле Си.

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

Попросим таких из професии и будет меньше подобных тредов.

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

Гнать школоту сцаными тряпками в дворники так себе идея, так и работать станет некому. Все и так со временем устаканится, дедушка Дарвин гарантирует это. Люди растут, учатся. Вчера лабал хелловорлды - глядишь, а он уже в ядро пушит.

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