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

    +138

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    /usr/include/sys/seg.h:
    #define shm_ptr u_ptrs.shmptr
    
    myfile.c:
    static SHRMEM_INFO_PTR shm_ptr = NULL;

    Сегодня для разнообразия системный хедер от AIX.

    Повбывав бы производителей, которые ограничивают полет моей фантазии (и так весьма приземленный) в именованиях моих личных переменных!

    Запостил: nil, 09 Июля 2010

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

    • Кстати, если погуглить shm_ptr, то народ его использует (оно и логично, потому что название очевидное). А PHP (свят-свят-свят, чур меня!), который компилируется и на AIX-е, тоже его использует, но (следите за руками):

      #undef shm_ptr                                  /* undefine AIX-specific macro */

      И чуть пониже...
      static void php_release_sysvshm(zend_rsrc_list_entry *rsrc TSRMLS_DC)
      {
              sysvshm_shm *shm_ptr = (sysvshm_shm *) rsrc->ptr;
              shmdt((void *) shm_ptr->ptr);
              efree(shm_ptr);
      }
      Ответить
    • LOL. я вот помню как-то в С++ enum сделал: enum action_t { START_AT_ZERO, SEEK_END };

      пару дней убил что бы понять какого рожна компилятор не компилит, и вообще что это за цифра 2 которая постоянно всплывает в сообщении об ошибке......
      Ответить
      • У меня уже устойчивый рефлекс на НЕХ: сначала посмотреть, что там в действительности хочет компилироваться.
        Но енум бы я так не отловил:)
        Ответить
      • >enum action_t { START_AT_ZERO, SEEK_END };
        Тут какой-то идентификатор дифайном подменяется в С++? Или в чём ошибка? Почему недолжно скомпилироваться?
        Ответить
        • ага. SEEK_END - стандартная константа - man lseek.

          но так был на с++ зациклен, что просветление посмотреть на код после с препроцессора пришло не быстро.
          Ответить
          • ОК.
            Ответить
          • Кстати, еще одна причина перестать использовать дефайны для констант.
            Ответить
            • Это ещё одна причина хоть раз в жизни выучить библиотекУ, с которой работаешь
              Ответить
              • :)
                Ответить
              • Ужас в том, что ее надо выучить, даже если с ней не работаешь. Мало ли кто этот fcntl.h включает...
                Ответить
                • Macros are evil!!!
                  Ответить
                  • Зачем же такое громкое название для макросов С++? Скорее "Macros are мелкий гаденький пакостник."

                    И да, зачем так обобщать? "С++'s Macros are evil!!!" В других языках, например Nemerle, это основа большинства конструкий языка и притом очень гибкая и безопасная.
                    Ответить
                    • C++ macros considered harmful!
                      Ответить
                    • Не я придумал такое название:
                      http://www.parashift.com/c++-faq-lite/misc-technical-issues.html
                      http://www.parashift.com/c++-faq-lite/inline-functions.html
                      Ответить
                      • Это что такое?
                        if (!(o << x))
                             throw BadConversion("stringify(double)");
                        Разве потоки при ошибке преобразования данных в строку сами не бросают исключения? О_о
                        Ответить
                      • >Because #define macros are evil in 4 different ways: evil#1, evil#2, evil#3, and evil#4.

                        :D
                        Ответить
    • показать все, что скрытоИди педаль на ПэХоПэ, дятлище.
      Ответить

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