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

    −99

    1. 1
    2. 2
    3. 3
    4. 4
    // Adhere to section 17.4.1.2 clause 5 of ISO 14882:1998
    #ifndef va_end
    #define va_end(ap) va_end (ap)
    #endif

    /usr/include/c++/5/cstdarg

    Запостил: someone, 01 Декабря 2015

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

    • Names which are defined as macros in C shall be defined as macros in the C++ Standard Library, even if C
      grants license for implementation as functions. [Note: the names defined as macros in C include the following:
      assert, errno, offsetof, setjmp, va_arg, va_end, and va_start. —end note]
      Ответить
      • > assert, errno, offsetof, setjmp, va_arg, va_end, and va_start

        этот список читается почти как The Good, The Bad and The Ugly.
        Ответить
    • что бы `#if defined(va_end)` работало.
      Ответить
      • А аргумент зачем? Такой код тоже решит эту проблему:
        #define va_end va_end
        Ответить
        • Чтобы всякие IDE нормально понимали, например. Ну и потому что с аргументом семантику лучше видно. Что это не какая-то произвольная хуйня, которая заменяется на саму себя, а function-like макрос.
          Ответить
    • рекурсия, однако

      а заодно и кодстайл подправим :]
      Ответить
    • Мы уже недавно это про stdin/stdout/stderr обсуждали.
      Ответить

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