• Как удобно переключаться между двумя дисками?

    @pfg21
    ex-турист
    1. менять приоритет запуска носителей в менюшке биос.
    2. поставить хороший загрузчик и менять приоритет запуска разделов в нем.
    Ответ написан
    Комментировать
  • Как удобно переключаться между двумя дисками?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Bcdedit вам в помощь. Настройте менюшку на входе по дефолту 10 через 5 сек или пункт меню
    Ответ написан
    Комментировать
  • Как записать значение в файл и зашифровать его на языке C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Открывайте файл в бинарном режиме "wb" и пишите туда через fwrite (лучше побайтово, чтобы не мучиться с переносимостью из-за порядком байтов в int).

    Читайте, соответственно, через fread.

    Для шифрования лучше всего, во-первых, байты в разном порядке писать, (не 0,1,2,3, а, скажем, 2,0,3,1) и, во-вторых, xor-ить их с какими-то константами. А еще лучше не с константами, а со случайными данными, которые тоже записываются в файл рядом. Или не рядом, так будет закономерность меньше видна.

    Но все это может спасти только от людей незнакомых с reverse engineering'ом и отладкой. Более менее осведомленный ползователь посмотрит в ассемблерный код и поймет, что и как там читается и где и что надо поменять. Но да, это посложнее просто редактирования txt файла.

    Ну и, artmoney с cheat engine никто не отменял.
    Ответ написан
    Комментировать
  • Почему при вызове деструктора не меняется переменная?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Я так понимаю, у вас проблема со строчкой
    aobj1[0] = a(2);

    Тут вызывается конструктор для временного значения a. Потом оператор копирования из временной переменной в *aobj. Потом вызывается деструктор временного значения.

    А потом где-то в конце произойдет и деструктор aobj.

    У aobj delete_counter после этой строчки равен 1 (ведь он скопирован у временного значения, которое сделало delete_counter единицей в констукторе). В конце при вызове деструктора aobj там delete_counter будет 1 в начале.

    Вы смотрите на адрес this в дебагере в деструкторе. Два вызваных деструктора будут для двух разных объектов (для временного значения и для aobj).

    Если вы хотите какой-то счетчик ссылок делать, то вам надо переопределять операторы копирования и перемещения (а так же все возможные конструкторы). И там аккуратно изменять счетчик ссылок. И счетчик ссылок должен быть частью общего объекта - частью класса b, а не класса a.
    Ответ написан
    4 комментария
  • Почему dhpcd сжирает все ресурсы сервера?

    fzfx
    @fzfx
    18,5 дм
    мне неизвестен ни один сервер DHCP с именем .dhpcd. больше похоже на майнер.
    Ответ написан
    2 комментария
  • Почему Git-команда ведёт себя так?

    @qwazimord
    Интроверт
    Эта команда выводит конфиг постранично. Если нажать пробел - появится следующая страница, если q - то команда завершится и снова можно будет вводить команды. Перед нажатием q убедитесь, что раскладка английская, а не русская.
    Ответ написан
    3 комментария
  • Почему простой цикл на c++ выполняется медленнее, чем на golang?

    @deliro
    Да хотя бы потому что оптимизатор может выбросить цикл, посчитав его ненужным. Есть оптимизации, которые умеют цикл заменять прогрессией, а здесь цикл можно вовсе удалить, тк он не влияет ни на что
    Ответ написан
    Комментировать
  • В чём отличие git bash и просто bash?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Git это линуксовый пакет программ, состоящий из множества утилит работающих в текстовом терминале. Когда портировали Git в Windows, пришлось портировать и часть окружения Linux, в том числе и интерпретатор командной строки bash. Git хоть и может выполняться в стандартной командной строке Windows или в Power Shell, но родным для него является bash и лучше работать в нём. Так как это не полноценный bash из линукса, а лишь его виндовая адаптация для Git, то его и назвали Git bash.
    Ответ написан
    Комментировать
  • Какая разница на практике между clang и gcc?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Однажды я на подобный вопрос уже отвечал, правда там вопрос был о кроссплатформенности, а не о трансляторах.

    Какая разница между clang и GCC.
    Разница большая. GCC обладает обширной поддержкой наследия идиом и конструкций из языка C, которые, вынужденно или по своей воле, поддерживает в современном C++.
    VLA, тип по умолчанию, всевозможные изыски синтаксиса C. Это все GCC не глядя принимает за C++ код и позволяет трансляцию.
    GCC даже сегодня многократно нарушает стандарты C++ просто потому что выбрал стратегию поддержки экзотической функциональности C в коде C++. Так же GCC не хвастается и скоростью поддержки стандартов C++.
    В 2016 году Google полностью отказались от поддержки GCC в Android NDK из-за слишком плохой поддержки стандартов и слишком свободного следования стандартам C++. В этот момент GCC стал неконкурентоспособным относительно оставшихся двух самых широко используемых трансляторов.
    Clang же, наоборот, сегодня считается, буквально, бастионом идеального следования стандартам C++. Clang точно поддерживает стандарты во всех деталях, максимально быстро интегрирует изменения и добавления стандартов, позволяет в самых первых рядах поиграться с функциональностью из драфтов следующего стандарта C++.
    Clang обладает обширной системой статической и динамической проверки кода: богатый статический анализ, возможность подключения санитайзеров, поддержка C++ Core Guidelines, очень качественные отчеты об ошибках трансляции, хорошая скорость трансляции.
    Это все ставит clang в предпочтение перед GCC на третьих для GCC платформах.

    О полной совместимости между трансляторами.
    Полная совместимость между трансляторами есть. Иначе я бы не мог делать то, что я делаю. А дело мое заключается в создании полностью кроссплатформенного кода, который однозначно собирается на всех целевых платформах и на всех них выполняется так же однозначно.
    Полная совместимость между трансляторами заключается в строгом соответствии кода выбранному стандарту C++. Всё, точка. На этом к трансляторам требования заканчиваются.
    Только тут есть небольшая проблема. Каждый транслятор по-своему поддерживает стандарт и по-своему реализует неоговоренные стандартом механики. Каждый транслятор имеет свои ошибки трансляции. И вскрывается это все именно в процессе работы над кроссплатформенным кодом.

    Я в своей работе видел многое. Я видел как при смене GCC на clang люди хватались за голову и отказывались от последнего просто потому что он нашел горы нарушений стандарта, которые молча принимал GCC. Я видел как группа из 5 человек 3 месяца рефакторила код при переходе с MSVS2015 на MSVS2017 (т.е. просто при смене версии транслятора) просто потому что разработчики из рук вон плохо знают используемый ими стандарт C++.
    Я видел ошибки в clang, приводящие к неверной генерации кода. Я видел ошибки в GCC, не позволяющие использовать его для кроссплатформенной сборки. Я видел ошибки в MSCL, в результате которых последний явно нарушает стандарт, а команда его разработки отказывается это исправлять потому что "иди нафиг".

    И, тем не менее, конкретно у меня есть возможность писать код ровно один раз и собирать его на 5 совершенно разных целевых платформ совершенно разными трансляторами, на которых этот код работает абсолютно равнозначно. Просто потому что я знаю стандарт и то, как этот стандарт поддерживают выбранные мной трансляторы.
    Ответ написан
    3 комментария
  • Как замерять время выполнения функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как замерять время выполнения функции?

    Можно воспользоваться парой clock_gettime / clock_getres.

    как можно искусно замедлить выполнение

    Можно организовать искусный цикл вокруг замеряемой функции и разделить его общее время выполнения на количество итераций. Но детали зависят от того, какое именно время вы там пытаетесь померить. Т.е. если там важны эффекты от кеша, то тупой цикл может быть недостаточно искусным.
    Ответ написан
    Комментировать
  • Как избежать дублирования последней строки из файла?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Вам надо проверять, что вернет fscanf. Если оно у вас вернет что-то меньшее 2, то значит оно не смогло прочитать обе строки. В этом случае надо выходить из цикла и не класть новую запись в таблицу
    Ответ написан
    Комментировать
  • Форматирование смонтированного диска?

    @pfg21
    ex-турист
    ничего не будет.
    ты монтируешь носители не один в другой, а все носители в VFS - виртуальный файловый распределитель это демон, который и разбирается в какой подключенный драйвер файловой системы отправить файловые запросы от пользователя.

    просто обычно есть один носитель, который монтируется как корень "/" но его вполне нормально можно отмонтировать или перемонтировать, ничего не делая с монтированными в /mnt носителями. и т.д.
    они никаким образом меж собой не связаны.
    Ответ написан
    Комментировать
  • Принёсет ли дивиденды изучение модулей С++20?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Знание определенной особенности синтаксиса языка не является основным критерием приема на работу на должность разработчика на C++, потому что оно приобретается за один (1) вечер - путем изучения учебника и реализации пары примеров из него же.
    Ответ написан
    Комментировать
  • Как задать значение последней переменной?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Имеется код вида
    int64_t a = b/c
    b и c какие-то произвольные числа
    требуется записать 0 в переменную a, если произошел SIGFPE.
    Проверять значения b и c не вариант, нужно как-то задавать значение для a в обработчике сигнала.

    Задача в такой постановке выглядит странной, если это не просто учебная задача на обработку сигналов.
    Если это учебная задача -- то конечно, и ассемблерная вставка тут может помочь, но это не вопрос для тостера.
    Если это практическая задача, то решить её можно следующими способами:

    - наиболее простой и переносимый, но не самый быстрый -- таки проверить значения b и c перед вычислениями.

    - следующий по простоте -- использовать setjmp перед началом блока вычислений который может закончиться сигналом, в обработчике сигнала вызвать longjmp, после возврата присвоить результатам нужные значения.

    - следующий вариант -- нифига не простой и не переносимый -- устанавливать обработчик сигнала с помощью sigaction, заказывать доставку SA_SIGINFO и анализировать ucontext (третий аргумент) в обработчике сигнала. Сложность заключается в том, что связь между тем, что будет записано в ucontext и исходным кодом на C ни разу не очевидна. Т.е. можно извлечь из памяти по адресу info->si_addr инструкцию вызвавшую сбой, проанализировать её длину и куда она записывает результат, записать в результат 0 и передвинуть адрес возврата. Но это выглядит как неоправданное количество мороки.
    Ответ написан
  • Как ограничить конфиг openvpn по времени?

    @Mikeoldfield
    Сетевой инженер / системный администратор
    Если по сертификату - то ставишь срок действия один месяц и всё.
    Ответ написан
    1 комментарий
  • Какой выбрать VPN сервер для обхода блокировок?

    @Drno
    https://antizapret.prostovpn.org/selfhosted.html

    при желании можно будет добавить свои сайты. разворачивается в контейнер, реальной настройки - 5 минут
    Ответ написан
    2 комментария
  • Сначала merge, потом push или наоборот?

    GavriKos
    @GavriKos
    Ну а вы понимаете что делает git push? В целом то валиден и 1 и 2 вариант, только для разных ситуаций
    Ответ написан
    Комментировать
  • Алгоритм двоичного поиска. Почему неправильно работает алгоритм?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Знаки в условиях перепутаны.
    Ответ написан
    Комментировать
  • Что делать, если появляется непонятная ошибка после запуска c++ кода?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что делать, если появляется непонятная ошибка после запуска c++ кода?

    Пытаться понять её -- универсальный рецепт.

    это исходный код.
    thread my_thread1(&connecter);
    if(connfd == true)

    В этом месте две ошибки. Первая -- ты сравниваешь int connfd с bool true, а вторая -- ты делаешь это без уважения потоконебезопасным способом. Прямо скажем, у тебя тут гонка между main и connecter. Когда ты эту гонку исправишь, жизнь твоя, скорее всего, наладится. Непонятно, правда, зачем ты вызываешь accept в параллельном потоке вместо того, чтобы сделать это синхронно, прямо в main.
    Ответ написан
    Комментировать
  • У меня несколько ошибок "was not declared in this scope" в коде C++, что делать?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Глобальные переменные должны быть определены выше фкнкций их использующих. А что-то, например buff, у вас вообще локальные переменные, которые вы пытаетесь использовать в других функциях. Или сделайте и ее глобальной, или передавайте ее везде, где надо, как параметр.

    И так по каждой ошибке от компилятора в вашем вопросе. Смотрите на какое имя он ругается и где эта функция/переменная определена.
    Ответ написан
    1 комментарий