Няшная / Говнокод #27255 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>

int main(void)
{
  uint32_t uint32max = UINT32_MAX;
  int32_t int32_minus_one = -1;
  printf("uint32_max = %" PRIu32 "\n", uint32max);
  printf("int32_minus_one = %" PRIi32 "\n", int32_minus_one);
  if (uint32max > int32_minus_one)
  {
    puts("uint32max > int32_minus_one");
  }
  else if (uint32max < int32_minus_one)
  {
    puts("uint32max < int32_minus_one");
  }
  else
  {
    puts("uint32max == int32_minus_one");
  }
  return EXIT_SUCCESS;
}

Почему в Си нет особого правила при сравнении signed и unsigned типов, ну типа если значение в signed типе отрицательно, то он полюбасу будет меньше любого unsigned значения? А то говно какое-то.

(нет, я понимаю почему так происходит, но все равно говно)

Запостил: j123123 j123123, (Updated )

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

  • надо всего лишь добавить знание о типах в рантайм, и можно будет сделать
    Ответить
  • Потому что тип - это абстракция, процессор сравнивает байты, слова, двойные слова.
    есть разные инструкции - сравнить два знаковых и два беззнаковых числа. В процессорах, я думаю, нету операций смешанных сравнений.
    Ну и я думаю это одно из следствий статической типизации: типа и не предполагается, что будут сравниваться данные разных типов. Ну и действительно: зачем? Что может заставить сравнивать число, которое заведомо положительное с заведомо отрицательным? Как можно сравнить утку с кошкой? Квадрат с кругом? Разве что только по площади\объему, но площадь\объем - это тоже отдельный тип.
    То есть сравнение данных разных типов - говнокод, и, наверное багор (я хз смысл этого слова).
    Ответить
    • > В процессорах, я думаю, нету операций смешанных сравнений.

      В процессоре много чего нету. Что не мешает конпелятору составлять нужную операцию из нескольких.

      В данном случае можно было бы трактовать s > u как s >= 0 && s > u. Именно это программист обычно и имеет в виду перед тем как наступить на грабли.
      Ответить
      • Ну наверное так и не нужно делать, нужно структуры данных так продумать, чтобы и не приходилось думать о таких граблях.
        Читай мой второй абзац.
        Ответить
        • Ну да, именно поэтому в джаве оставили только знаковые числа. Чтобы не думать об этих граблях.

          Иначе конфликты неизбежны: в одной либе сделали координату как int, в другой как uint, а ты сиди и ебись теперь.
          Ответить
            • получилось много всякой чуши типа минус девятого элемента массива итд. Много чего проверяется в рантайме, а могло бы в компайл тайме

              За всё нужно платить
              Ответить
              • я могу понять обращение по отрицательному индексу, но отрицательный размер это уже за гранью

                впрочем, я уже когда-то бугуртил по этому поводу
                Ответить
                • Всё норм. В массиве было -5 элементов, я обратился к -3.

                  -5 -4 -3 -2 -1
                  Ответить
                  • В классе было два человека, три из них вышло.
                    Учитель говорит: ну вот еще один придет, и вообще никого не останется
                    Ответить
            • Знаковый размер и знаковый индекс - это единственно правильное решение в дизайне вектора, например. То, что сделали крестоябляди - это говно, о котором они сами пожалели.
              У растоблядей тоже беззнаковый дерьмотип, но там не получится проебать выход за пределы при касте.
              Ответить
      • зачем компилятору делать лишнее действие? Это же си, тут считается, что программист сам понимает, что делает
        Ответить
  • Даже в шарпе такого правила нету, лол. Хотя вроде как высокоуровневый язык, не прибитый гвоздями к пирфомансу и архитектуре.

    Ну вернее для int'ов то оно есть (потому что в long кастуют), а вот long и unsigned long там тупо нельзя сравнить.
    Ответить
    • Типы ж разные, нехуй сравнивать. Пусть кодерок сам скажет, что делать.
      Ответить
      • это если кодерок в принципе вкурсе, что кроме "число" и "не число" бывают более конкретные типы
        Ответить
  • Пирфоманс важнее корректности. Лучше вернуть хуйню, зато быстро, без второго сравнения.
    Ответить
  •                                        Achtung!                                          

    Wir werden angegriffen! Alle posten besetzen. Ich wederchole: wir werden angegriffen!
    Ответить
  •                                        Achtung!                                          

    Wir werden angegriffen! Alle posten besetzen. Ich wederchole: wir werden angegriffen!
    Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8