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

    −12

    1. 1
    #define long long long

    Запостил: 3_dar, 28 Апреля 2017

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

    • Подло, но на x86 скорее всего ничего не поломает. Разве что будет после стандартных хидеров. А нет `long long long` таки too long for gcc
      Ответить
      • на виндах, с типичным непортабельным софтом, который 30 лет со времен доса патчат - да, ничего не сломает.

        *них 32 бит сломает (ну до они уже почти вымерли). *них 64 бита преимущественно не сломает - потому что там хак совместимости с 32 бит стоит: long == long long == 64bit.

        и еще гцц будет кидать ворнинги на "%ld" vs "%lld" в принтфах. в зависимости где и как определен size_t - может тоже будут ворнинги.
        Ответить
        • > long == long long == 64bit.
          long long и long -- разные типы. Хотя внутри могут быть одинаковыми.
          https://wandbox.org/permlink/dTUrQICJ8B3bzbq8

          > *них 32 бит сломает (ну до они уже почти вымерли).
          А что там? Вроди тоже long -> 64bit
          Ответить
          • > > *них 32 бит сломает (ну до они уже почти вымерли).

            > А что там? Вроди тоже long -> 64bit

            забываешь старое неписаное правило `sizeof(long) == sizeof(void*)` на которое кучи людей полагаются.
            Ответить
            • Ха, я настолько сосунок, что даже не знал про правило :D
              Ответить
              • правило говняное, потому что правильней бы было `sizeof(long) >= sizeof(void*)`

                PS
                https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models
                Ответить
            • > старое неписаное правило
              Впизду. На венде оно не выполняется. Да и сейчас уже есть uintptr_t, выбитый на скрижалях стандарта.

              > sizeof(long) >= sizeof(void*)
              Ты имел в виду sizeof(long) <= sizeof(void*)? :)
              Ответить
              • "указатель помещается в лонг", а не наоборот.
                Ответить
                • "указатель помещается* в лонг"

                  *на некоторых платформах
                  Ответить
                  • на всех платформах. кроме MS-DOS-based.
                    Ответить
                    • в borland c++ 3.1 под dos указатель помещался в int, и уж точно в лонг
                      Ответить
              • Короче говоря, так:
                sizeof(long) <= sizeof(void*) || sizeof(long) > sizeof(void*)
                Ответить
    • привет, тридар
      Ответить
    • показать все, что скрытодефайнул свой лонг лонг лонг в твоем шорте, проверь
      Ответить
    • It was a long long code with long long long long.
      Ответить

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