1. Си / Говнокод #353

    −20.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    int clearscreen()
    {
    clrscr();
    return 0;
    }
    void main()
    {
    char * c;
    
    printf("You typed: %c",
           *c,
           scanf("%c",c),
           printf("Type any simbol: "),
           clearscreen());
    
    }

    Страшен язык Си 2

    Запостил: guest, 10 Января 2009

    Комментарии (6) RSS

    • Alexander G:
      Хм. Один из "хороших вопросов на собеседовании" почему это может работать, почему может не работать, в каких местах содержится неопределённое поведение :)
      Ответить
    • Ну я тут вижу один недостаток - использование с в кач-ве адреса.

      scanf("%c",c) - мы записываем символ по адресу, который содержится в c..А аллах его знает, что там может быть..
      Ответить
    • Пропустил слово =)
      "использование с в кач-ве неопределенного адреса".
      Ответить
    • Alexander G:
      Порядок оценивания аргуметов не определён, хотя обычно получается с конца.
      Однако, про *с (предполагая, что указатель был бы коррекстно инициализирован) видимо поведение не undefined, а unspecified, т.е. *c будет оценено или до scanf или после, но без сюрпризов. Но для этого должен быть инициализирован не только указатель, но и то, на что он указывает, иначе unspecified переходит в undefined.
      Ответить
    • показать все, что скрытоАллах:
      только расово-неверные пидарасы используют scanf
      Ответить
    • Чайэфир:
      эм взываю к Аллаху, чем же пользуются расово-верные пидорасы? вы имеете религиозные предубеждения против scanf? вы предпочитаете считывать прямо из потоков?
      Ответить

    Добавить комментарий