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

    +142

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    /* Standard streams.  */
    extern struct _IO_FILE *stdin;		/* Standard input stream.  */
    extern struct _IO_FILE *stdout;		/* Standard output stream.  */
    extern struct _IO_FILE *stderr;		/* Standard error output stream.  */
    /* C89/C99 say they're macros.  Make them happy.  */
    #define stdin stdin
    #define stdout stdout
    #define stderr stderr

    А смысл?

    Запостил: intelfx, 21 Июля 2011

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

    • рекурсия? = )
      Ответить
    • задефайнено где-то еще и нужно передефайнивать?
      Ответить
      • задефайнены дефайны не по-дефайновски, надо их передефайновать, перевыдефайнить
        Ответить
    • Перегружена вся подсистема ввода/вывода, включая printf() & co?
      Ответить
    • А чего тут не понятного? В 5ой строке же всё сказано.
      Ответить
      • К.О.
        а почему без строк 6-8 они не хэппи?
        Ответить
        • потому что без этих строк они не есть макросы
          Ответить
    • Альтернативная реализация (часто используемая):
      extern struct FILE _files[MAX_FILES];
      #define stdin &(_files[0])
      #define stdout &(_files[1])
      #define stderr &(_files[2])
      Это почему в стандарте говорится, почему это может быть макросом.

      А вот почему это должно быть макросом — на случай кода:
      #ifdef stdin
      ...
      или
      #ifndef stdin
      #include <stdio.h>
      #endif
      Ответить

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