Тонкости C/C++

Тема в разделе "LANGS.C", создана пользователем Nafanya, 5 фев 2011.

  1. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Rel

    Вы не могли бы дать ссылочку, по которой Вы обращаетесь за стандартами C++ - то есть откуда вы взяли "The binding of operators in C and C++ is specified (in the corresponding Standards) by a factored language grammar, rather than a precedence table. This creates some subtle conflicts. For example, in C, the syntax for a conditional expression is"
    и т.д.

    Думаю, что некоторые вещи полезно мне будет почитать.
     
  2. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Rel
    Кстати вот нашел одну очень интересную красивую тернарную команду:
    Код (Text):
    1. --b?b:b=-999
    Та еще фишка:) Столько смысла кроется за 12-ю символами:)
     
  3. krabz

    krabz New Member

    Публикаций:
    0
    Регистрация:
    26 май 2010
    Сообщения:
    135
    вот это тоже компилируется:
    Код (Text):
    1. for(;P(" "),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("|"+(*u/4)%2);
     
  4. newbie

    newbie New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    1.246
    это тоже:

    Код (Text):
    1. main(argc, argv)
    2. int argc;
    3. char    **argv;
    4. {
    5.     while (*argv != argv[1] && (*argv = argv[1]) && (argc = 0) || (*++argv
    6.         && (**argv && ((++argc)[*argv] && (**argv <= argc[*argv] ||
    7.         (**argv += argc[*argv] -= **argv = argc[*argv] - **argv)) &&
    8.         --argv || putchar(**argv) && ++*argv--) || putchar(10))))
    9.         ;
    10. }
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Это тоже:

    Код (Text):
    1. int main()
    2. {
    3.     https://wasm.ru/forum/viewtopic.php?id=40144&p=5
    4.  
    5.     return 0;
    6. }
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    http://www.google.ru - абсолютно серьезно...

    что это? я видел подобное в цикле, подобным образом заполняли строку символами, но то было тоже из серии roвнокода...

    да тут просто https: трактуется, как метка, а все, что после // - комментарий)
    знаю, знаю... капитан очевидность...
     
  7. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Rel
    Это пример из книги Философия Си++, не думаю что её автор пишет гуанокодом...
    В том случае если декрементированное значение переменной b отлично от нуля, оно присваивается переменной b, в противном случае ей присваивается -999;
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    да как-то это не очень интересно)))
     
  9. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Rel

    Кстати если вы для проверки своих знаний (ну чисто для себя) захотите сдать экзамен на INTUIT по Си++, вы убедитесь что в тестовых вопросах там полно того, что вы называете гуанокодом. Такие вопросики также часто задают на собеседованиях. (когда скобками явно не указана последовательность выполнения операций и нужно вспоминать приоритет).
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Не нужно быть философом, чтобы понять что это гуан. Вообще тернарные операторы сами по себе гуан.
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Nafanya
    Спрашивается, нахрена. Хороший код должен быть удобочитаем, а не головоломен. В этом плане мне импнируют S выражения, всё очень логично. Возможно мне просто повезло, но мне на собеседования такое не попадалось. Если бы попалось, то я бы подумал нехорошее.
     
  12. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Booster
    Да что Вы говорите... Вот вполне оправданное применение тернарного оператора (пример GRRRLPower)
    Код (Text):
    1. relative_time += delay == -1 ? delta : delay;
    Получается одна строка вместо 5. Без знания приоритетов тут никак.
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Зачем? Вот во многих других языках такого нет. И что, это как-то портит жизнь? Не смешите. ^)
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Зачем? Вот во многих других языках такого нет. И что, это как-то портит жизнь? Не смешите. ^) Оптимальность программы мерите в строках?

    Мне программу писать нужно, а не приоритеты зубрить по ночам.

    Юношеский максимализм детектед.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    да это бред... помните в одной серии советского Шерлока Хоумса была такая фраза, мол мозг это как чердак, дурак забивает его всем подряд, а в моем чердаке хоть и мало вещей, но я всегда знаю, что с ними делать и как их найти... я помню меня по молодости спрашивали чем стдкол отличается от цдецс например, но никогда не спрашивали о каких-то редких особенностях языка... просто стоит подумать, если вас заставляют в голове анализировать нечитаемый код, то от вас именно этого и хотят... то есть до вас работал какой-нить задротопрограммер, который понаписал кучу непонятного никому но полезного кода и уволился, а от вас хотят, чтобы вы с этим разобрались)))

    придумал еще пример тернарного оператора:
    Код (Text):
    1. void FunnyTolower(char* str)
    2. { while(*str) { *str++ = *str >= 'A' && *str <= 'Z' ? *str - 'A' + 'a' : *str; }}
    3.  
    4. int _tmain(int argc, _TCHAR* argv[])
    5. {
    6.     char buf[256];
    7.     memset(buf, 0, 256);
    8.     strcpy(buf, "ToLoWeR TeSt StRiNg!");
    9.     FunnyTolower(buf); 
    10.     printf("%s\n", buf);
    11.     return 0;
    12. }
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Nafanya
    Значит это гуано тест.
     
  17. Nafanya

    Nafanya Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    581
    Rel
    Красиво:) Если заглавная буква, то преобразуется в прописную, прописная так и остается. И пробег в цикле до нулевого байта строки:)
     
  18. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    Rel

    Отличный пример когда действительно тернарный оператор лишний. Гораздо понятнее и логичнее использовать if, тогда хотя бы не надо будет выполнять бесполезное присваивание *str++ = *str.
     
  19. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Nafanya
    Нужно различать вопросы от "профессиональных преподавателей" у которых задача придумать что-нибудь этакое позаковыристей чтобы студенты всю серьёзность момента прочувствовали, от вопросов имеющих непосредственное отношение к практике ;)
    И если при трудостройстве задают такие вопросы то имхо нужно от такого работодателя держаться подальше, если конечно же не мечтаешь посвятить себя разгребанию совершенно нечитаемого гуанокода :))
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    еще одна порция тернарного бреда:
    Код (Text):
    1. bool func(char*& ch, int val) { *ch++ = val + '0'; return true; }
    2.  
    3. int _tmain(int argc, _TCHAR* argv[])
    4. {
    5.     char  ch[4] = "000";
    6.     char* ptr   = ch;
    7.     bool  cond  = true;
    8.     cond ? func(ptr, 1) | func(ptr, 2) | func(ptr, 3) : func(ptr, 3) | func(ptr, 2) | func(ptr, 1);
    9.     printf("%s\n", ch);
    10.     return 0;
    11. }
    вызов трех функций по условию и веселая ссылка на указатель в параметрах функции)))

    пример как бы не претендует на адекватность и правильность... просто пример...