LINUX.ORG.RU

Сишный быдлокодер.

 ,


0

2

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

Что по вашему мнению есть быдлокод, а что нет? Лично у меня чувство неопределённости, так как нет того кто ткнёт пальцем в кусок кода.

И у меня развилась мания, я переписываю всё заново. Что почитать/посмотреть про хороший стиль программирования на С? Как блин понять то, что твой код нормален или он быдлокод? И да у меня одного привычка переусердствовать с if() {} else{};? Приветствуются куски кода/целые проекты с указанием быдлокод/идеальный код.

И да, я немного пьян.

Мне конечно стыдно, но вот https://github.com/fedor-elizarov для примера, там мало конечно но думаю хватит и этого, остальное локально храню. Ну и cast beastie, ты просто адекват и сишник.

★★★★★

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

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

Начал читать.

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

Посмотрел на ник.

qulinxao

Перестал читать.

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

http://github.com/git-mirror/nginx — хотя бы посмотреть на код.

https://github.com/git-mirror/nginx/blob/master/src/core/nginx.c

#if (NGX_SETPROCTITLE_USES_ENV)

    /* allocate the spare 300 bytes for the new binary process title */

    env[n++] = "SPARE=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
               "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
               "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
               "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
               "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

#endif

Compiler-specific?

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

The preferred way to ease multiple indentation levels in a switch statement is to align the «switch» and its subordinate «case» labels in the same column instead of «double-indenting» the «case» labels.

дальше эту парашу можно не читать

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

Кто-то еще читает детский лепет procoder99'а?

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

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

schizoid ★★★
()

Раз пошла такая пьянка, покритикуйте и меня.

typedef struct{
    unsigned char data_length; // real data length
    unsigned char size; // size of container
    unsigned char *data; // container pointer
}Command;

...

#define NEW_CMD_OBJECT(ARR_NAME, LENGTH) unsigned char _##ARR_NAME[LENGTH]; \
    Command ARR_NAME; \
    ARR_NAME.data_length=0; \
    ARR_NAME.size=LENGTH; \
    ARR_NAME.data=(unsigned char*)&_##ARR_NAME;

...

NEW_CMD_OBJECT(send, sendCmd.size+5);

Проект на C++(Qt), особой нагрузки в этих местах нет, можно было бы использовать QByteArray например, но мой внутренний зануда-вредитель шепчет мне использовать простые данные и стек вместо кучи. Как это со стороны смотрится?

anonymous
()

Полностью код не смотрел, но!!! Делай отступы в таких моментах:

int a = 4;
a = 5 + 4;

Без пробелов между символами операторов читабельность ухудшается в разы.

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

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

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

Красивее — это:

Command Send = {
        .data_length = 0,
        .size = sendCmd.size + 5,
        .data = buffer,
};

Не вдаваясь в подробности, почему у тебя так а не иначе.

И маленькое бурчание: префикс `_' зарезервирован.

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

И правда, написал так:

unsigned char sendCmdBuf[sendCmd.size+5];
Command send = {0, sendCmd.size+5, sendCmdBuf};
без всяких макросов. Лишняя строчка, зато читабельность на порядок выше. Спасибо.

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

воу воу, палехче. ro там все доступно. http://ideone.com/m6AD4Z

Да не в том дело. То, что malloc может выделить памяти больше, чем просишь - и младенцу понятно.

Вот такой коментарий:

/* allocate the spare 300 bytes for the new binary process title */

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

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

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

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

«SPARE=XXXXXXXX

не знаю зачем он это делает, а я как-то давно такое делал, чтобы бинарник можно было удобно патчить (зачем и почему — щас не вспомню)

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

однако проблемы копирайты похоронили очень и очень жемчужину

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

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

например, слово «наглийский» там было не ошибкой, а сложением слов «наглый+английский», и я этот прикол распарсил

а твоя речь просто путанна, и все

з.ы. ну и даже тот его стиль речи не стоит применять больше чем в 10% постов

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

Хз, оно там перед execve нового процесса и эта NGX_SETPROCTITLE_USES_ENV потом используется в каком-то хачиньи — https://github.com/git-mirror/nginx/blob/master/src/os/unix/ngx_setproctitle.c.

А так, да — http://stackoverflow.com/q/1704407/1337941.

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

allocate, разве не означает, что они хотят эти 300 байт как-то использовать (скажем записать что-то)?

не факт. надо смотреть код.

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

что-то у меня подобное впечатление складывается

интересная задачка. если начну писать бота - сюда выложу

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

Dron, что за точки с запятой после закрывающих фигурных скобок? Плюс ты что, про code conventions не слышал? Мне вот эти нравятся: http://techbase.kde.org/Policies/Kdelibs_Coding_Style.

Реализуется вот так:

astyle --indent=spaces=4 --brackets=linux \
       --indent-labels --pad-oper --unpad-paren --pad-header \
       --keep-one-line-statements --convert-tabs --indent-preprocessor \
       --preserve-date --formatted --suffix=none --add-brackets --align-pointer=name \
       `find src -type f -name '*.cpp' -or -name '*.cc' -or -name '*.h' -or -name '*.h.in'`

Так читается лучше:

if (point_init_all == OFF) {
    result = unien_read_conf(str_conf, "init_video");
    if (strcmp("yes", result) == 0) {
        unien_init_video();
    }

    result = unien_read_conf(str_conf, "init_audio");
    if (strcmp("yes", result) == 0) {
        unien_init_audio();
    }

    result = unien_read_conf(str_conf, "init_timer");
    if (strcmp("yes", result) == 0) {
        unien_init_timer();
    }

    result = unien_read_conf(str_conf, "init_cdrom");
    if (strcmp("yes", result) == 0) {
        unien_init_cdrom();
    }

    result = unien_read_conf(str_conf, "init_joystick");
    if (strcmp("yes", result) == 0) {
        unien_init_joystick();
    }

    result = unien_read_conf(str_conf, "init_eventthread");
    if (strcmp("yes", result) == 0) {
        unien_init_eventthread();
    }

    result = unien_read_conf(str_conf, "init_opengl");
    if (strcmp("yes", result) == 0) {
        unien_init_opengl();
    }
}

Ну и вообще говоря, лучше уж тогда вот так:

bool unien_enabled_in_conf(char *option, char *str_conf)
{
    char *conf_val = unien_read_conf(str_conf, option);
    return strcmp("yes", conf_val) == 0;
}

if (point_init_all == OFF) {
    if (unien_enabled_in_conf("init_video", str_conf)) {
        unien_init_video();
    }
    if (unien_enabled_in_conf("init_audio", str_conf)) {
        unien_init_audio();
    }
    if (unien_enabled_in_conf("init_timer", str_conf)) {
        unien_init_timer();
    }
    if (unien_enabled_in_conf("init_cdrom", str_conf)) {
        unien_init_cdrom();
    }
    if (unien_enabled_in_conf("init_joystick", str_conf)) {
        unien_init_joystick();
    }
    if (unien_enabled_in_conf("init_eventthread", str_conf)) {
        unien_init_eventthread();
    }
    if (unien_enabled_in_conf("init_opengl", str_conf)) {
        unien_init_opengl();
    }
}
Obey-Kun ★★★★★
()
Последнее исправление: Obey-Kun (всего исправлений: 1)

А почему всё ещё не в толксах?

PS: тред не читал.

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

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

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

Иди в дворники, если код читать не умеешь. Или потренируйся на примерах из Obfuscated C Contest. Когда научишься их легко разбирать, возвращайся в программирование.

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

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

mazdai ★★★
()

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

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

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

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

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

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

Но ты неспособен это понять - поэтому ты анскилябра.

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

Гордый хаскелист. А ну да, чуваки пишут на ЯП которые годятся лишь для конфигов тектового редактора, а потом говорят «почему я не понимаю нормальный ЯП?» - патамучто анскиллен и недано.

Твой удел писать конфиги для редакторов, а не то, что пишут на сишке.

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

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

 void foo()
{
    if (1/0 = 2) {

    }
}

А так пишут люди: void foo() {

if (1/0 = 2) {

} }

Ну и да, 4пробела щит.

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

А так пишут люди

ну нафиг, дойдёт до

}}}}}}}}}}}

вот и будет веселье.

Пусть лучше


  void foo()
  {
    if() 
    {
      ...  
    };
  }

так.

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

Так фейл с тегом.


  void foo() {
    if(){
      ...  
    }
  }

Вот так пишут люди, ты кстати не ответил на мои месаги - я тебе поцарски объяснил - я зря старался чтоли?

Так как пишешь ты - пишут только лалки. Выбирай кто ты - заедушная тотальная анскильность, либо человек.

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

Меня не сломить :)

Ну и видимо кто coreutils и прочее, прочее пишет тоже тотальная анскильность :)

К примеру https://github.com/goj/coreutils/blob/rm-d/src/ls.c

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

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

superhacker/procoder99 ? Узнаю слабо аргументированный школовысерский стиль. Ваше мнение очень важно для нас, мы вам перезвоним.

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

А ну да, я прям вижу твой скилл, который на днище донском, но ты всё балаболишь. Как жешь это интересно, когда из 30-40 человек всего пару что-то понимают, а остальные анскильные сущности на уровне паскалистов из 9-го класса. Зачем вы так живёте?

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

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

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

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

Ты хотя бы подписывайся, а то люди пугаются. Например так -

// царь

anonymous
()

Осиль для начала форматирование, код будет в 2 раза менее быдло-. Смотрел UNIEN:

- не надо вставлять столько бесполезных пустых строк. Одна (!) пустая строка должна отделять логические блоки. Перед и после фигурной скобки пустым строкам делать нечего - осиль нормально выравнивание, не надо мешать табы и пробелы и все возможные длины отступов. - пробелами отделяй операторы. if(strcmp(«yes», result)==0&&point_init_all==OFF) читать невозможно

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

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

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

Давай, бери уже избитый UNIEN

https://github.com/fedor-elizarov/UNIEN

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

Можно не собирать по крупицам, а почитать «Совершенный код». Там все уже собрано и обоснованно.

anonymous
()

Общее впечатление одним словом - простыня. В идеале нужно стремиться к тому, чтобы одна функция по вертикали умещалась в один экран, GNU этому плохо способствует. Еще минус в том, например, что комментарии к параметрам функций не всегда нужны, а места жрет много, лучше писать их в doxygen-style.

eagleivg ★★★★★
()
20 августа 2013 г.
Ответ на: комментарий от anonymous

кстати нашёл откуда я это помню ( оказывается не из журнала открытые системы , а из примечания к бруксовому мифическому человеко месяцу):

24. Кен Томпсон из Bell Labs, создатель Unix, давно понял значения большого экрана для программиста. Он придумал, как на свою примитивную электронную трубку Tektronix выводить 120 строчек текста в две колонки. Он держался за свой терминал, пока сменилось целое поколение быстрых трубок с маленьким экраном.

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