Задать вопрос
  • Что лучше unsigned int или long void?

    @Mercury13
    Программист на «си с крестами» и не только
    Что лучше: сóрок пя́ток или пятóк сорóк? © Винни-Пух
    unsigned int — это тип, поддерживающий положительные числа минимум до 65535 (а в современных реалиях — до 4 млрд)
    long void — нет такого типа в Си++.

    Да, я догадываюсь, вы хотите разницу между unsigned int и unsigned long. Unsigned long поддерживает не менее 4 млрд и в большинстве соглашений соответствует unsigned int (но иногда может давать 1,8·1019 — например, в Unix).

    Если вы пишете под конкретный процессор и конкретную ОС — пишите как угодно.

    Для простейшей кроссплатформенности x86/x64 Windows/Mac/Unix я вообще не рекомендую использовать long, используя int и long long. Для индексов в массиве (и прочего добра, чья длина зависит от длины процессора) используйте size_t и ptrdiff_t.

    Для широкой кроссплатформенности лучше использовать (u)int32_t (если важна арифметика переполнений или точное количество байтов), (u)int_fast32_t, (u)int_least32_t (если важно, чтобы хранило не менее N байтов).
    Ответ написан
    Комментировать
  • Возможно ли использовать оперативную память меньшей частоты?

    @Mercury13
    Программист на «си с крестами» и не только
    Не сгорит. Либо будет работать на своей частоте (чаще всего, если разрыв по поколению невелик), либо полный отказ без всяких перегревов (если ставите что-то совсем уж старое/новое).
    Ответ написан
    Комментировать
  • Какой “App type” выбрать в генераторе политики конфиденциальности для бесплатной игры с внутренними покупками и рекламой?

    @Mercury13
    Программист на «си с крестами» и не только
    Ad supported — поддерживаемая рекламой.
    Разница между Freemium, Ad Supported и Commercial только в преамбуле. Один хрен вам придётся подкорректировать политику конфиденциальности под свои цели — например, как реально используются куки.
    Ответ написан
    6 комментариев
  • Можно ли ускорить архивацию/разархивацию за счет распараллеливания ??

    @Mercury13
    Программист на «си с крестами» и не только
    Если использовать стандартную библиотеку сжатия (например, ZLIB), будет проблематично. Нужно как минимум писать своё сжатие с блэкджеком и многопоточностью.
    Однако можно распараллелить разархивацию и интерпретацию того, что разархивировалось, и это помогает. Проверено (писал сохранение в простой блочный формат, запаковываемый в ZIP).
    Архивация на ZLIB с высшей степенью сжатия упирается не в SSD, а в процессор. Тоже проверено. Для баланса между сжатием и остальной функциональностью установил степень сжатия в четвёрку.
    Ответ написан
    Комментировать
  • Почему atoi возвращает в EAX 0, хотя строка подается с символа цифры?

    @Mercury13
    Программист на «си с крестами» и не только
    Я не знаю, что такое month — но, по всей видимости, этот макрос надо вызывать invoke atoi, month.

    Потому что [month] — это разыменование. А нам адрес нужен.

    Так возвращает ноль или вылетает, я не понял? Если случился вылет, в eax может быть что угодно.

    С lea edi, [month] всё верно — lea не разыменовывает, а грузит адрес. Хотя ассемблер, по идее, должен выдать обычный mov edi, month.
    Ответ написан
    Комментировать
  • Инициализация элемента к нулю?

    @Mercury13
    Программист на «си с крестами» и не только
    1, 3. Просто совпадение, обычно потому, что компиляторы в отладочном режиме всё инициализируют нулями (проще отлаживать). На это нельзя рассчитывать, пиши HWND window = nullptr.
    2. Лучше написать std::string str;, да и всё. Можно рассчитывать, что будет пустая строка.

    Почему 1,3 плохо, а 2 хорошо? Потому что HWND и HRESULT — синонимы для встроенных типов (не то указатель, не то число того же размера), а у них конструктор по умолчанию ничего не делает. А string — нормальный себе объект.
    Ответ написан
    4 комментария
  • Как решить даную проблему?

    @Mercury13
    Программист на «си с крестами» и не только
    Тут всё просто: вы попытались разыменовать NULL-указатель.
    Надо хоть проверить, что наша нестандартная функция (с КиберФорума?) вернула.
    Ответ написан
    Комментировать
  • Какой алгоритм используется в пакетных менеджерах?

    @Mercury13
    Программист на «си с крестами» и не только
    Циклических зависимостей (B → C → B) обычно не бывает. Но вам нужен самый тупой поиск — например, в глубину.
    Ответ написан
    3 комментария
  • Почему выполнение программы ускоряется?

    @Mercury13
    Программист на «си с крестами» и не только
    Потому что у вас неэффективный алгоритм вычисления НОД, работающий на вычитании, а не на делении с остатком.
    Естественно, НОД(1,6) = НОД(1, 6−1=5) = НОД(1, 5−1=4) = НОД(1, 4−1=3) = НОД(1, 3−1=2) = НОД(1, 2−1=1) = НОД(1, 1−1=0) = 1
    НОД(2,6) = НОД(2, 6−2=4) = НОД(2, 4−2=2) = НОД(2, 2−2=0) = 2
    С арифметическим переполнением никак не связано. Просто даже в результате переполнения получились немаленькие числа.

    Как надо: НОД(1,6) = НОД(6, 1%6=1) = НОД(1, 6%1=0) = 1
    Аналогично для НОД(6,2) — в общем, сходится довольно быстро.
    Ответ написан
    Комментировать
  • Как правильно связывать между собой разные интерфейсы?

    @Mercury13
    Программист на «си с крестами» и не только
    Тут лучше всего использовать шаблонные классы.
    interface Collection <T> {}
    class PeopleCollection implements Collection <Person> {}
    Ответ написан
    Комментировать
  • Насколько работает линкер GOLD в MinGW и почему Invalid character?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    В 2021 используйте LLD.
    Ответ написан
    Комментировать
  • Существует ли библиотека Zip с потоковой записью?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    В конце концов перешёл на собственный порт MiniZip.
    Ответ написан
    Комментировать
  • Существует ли где-то libmysql.dll x86 8.0?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    Лучше использовать MariaDB с плагинами. Мария меньше и для неё есть что угодно.
    Ответ написан
    Комментировать
  • Что означают фигурные скобочки и то что в них написано в векторе с++?

    @Mercury13
    Программист на «си с крестами» и не только
    Это так называемый «универсальный инициализатор» Си++11. Иногда это действительно initializer_list, но не сейчас. Здесь он эквивалентен вызову конструктора
    std::vector<char>(data.get(), data.get() + size)
    Ответ написан
    Комментировать
  • Как выводить переменную в MessageBox?

    @Mercury13
    Программист на «си с крестами» и не только
    Собственно, Александр Ананьев всё сказал.
    А я хочу дополнить.
    1. Вы решили заложиться на компиляцию ANSI/Unicode, но (LPCTSTR)L"Account Details" неправильно сконвертируется в ANSI. Правильно _T("Account Details"). Хотя двадцать два года спустя на компиляцию ANSI, думаю, можно и забить?
    2. MessageBox не предполагает выбора — зачем функции возвращать int?
    Ответ написан
  • Дедекиндово сечение. Какой в нем смысл?

    @Mercury13
    Программист на «си с крестами» и не только
    Один из способов получить из рациональных чисел действительные.
    Проблем не будет.
    Однако эти супремумы и инфимумы стоило бы помучить.
    Ответ написан
    1 комментарий
  • Почему при делении 5/9 получается 0.55555....6?

    @Mercury13
    Программист на «си с крестами» и не только
    Калькулятор Windows использует компьютерный double для трансцендентных операций, и (как, впрочем, и электронные калькуляторы) самописную десятичную арифметику для сложения/вычитания/умножения/деления. Ну и хорошо — про артефакты компьютерных (двоичных) дробных рассказывать не придётся.
    Возьми и округли в десятичной системе 0,5555555555555… — разумеется, будет 0,556. Или 0,5555556 — всё зависит от того, сколько разрядов хочешь оставить.
    Ответ написан
    Комментировать
  • Не понимаю задачу, немогу решить,объясните решение?

    @Mercury13
    Программист на «си с крестами» и не только
    Ваш код решает одну задачу, постоянно выводя 38 — и ту через какую-то задницу.
    Во-первых, надо ВВЕСТИ информацию, а не пережёвывать цифры 12 и 126 непонятно каким раком.
    Во-вторых, вам надо получить x = n % 50. Если он 0, то и вывести 0 — иначе вывести 50 − x.
    Ответ написан
    Комментировать
  • Vector - объявление элементов, в чем разница между двумя способами?

    @Mercury13
    Программист на «си с крестами» и не только
    Первый способ: создаётся initializer_list, вызывается конструктор. Наиболее эффективен для простых тупых объектов.

    Второй способ эквивалентен push_back(string("vec1")) и сильно полагается на оптимизацию передаваемых параметров. Наименее эффективен.

    Третий способ гарантированно не создаёт промежуточные объекты (вызывает конструктор string(const char*) уже на месте). Вместе с reserve(3) наиболее эффективен для управляемых объектов.

    UPD. 2 и 3 для string() не очень сильно различаются из-за эффективного переноса. А вот для более крупных объектов 3 лучше.

    UPD2. Начиная с Си++20, 1 лучше, но только из-за того, что Си++ научился делать полноценные string’и при компиляции — то есть управляемый объект string обзавёлся некоторыми чертами тупого.

    UPD3. Ни один компилятор пока constexpr string пока не поддерживает. Но ведь ни у кого стабильного 20 пока нет, правильно?
    Ответ написан
    9 комментариев