• Есть ли способ получать предупреждение при преобразовании char в int?

    @res2001
    Developer, ex-admin
    По стандарту sizeof(char) == 1, sizeof(int) >= 2.
    char->int и int->char - это 2 разных преобразования. Судя по вопросу для вас это одно и то же.
    Первое проходит без предупреждения, поскольку значимость не теряется. На второе компилятор ругнется, обычно это warning, опциями компилятора можно сделать чтоб был error.
    Повышение char до int не зависимо от того какой конкретно char в данной системе вполне стандартизовано и укладывается в стандартное расширение целочисленных типов.
    Обратное преобразование приведет к обрезанию значащих бит, это то же описано в стандарте.
    Ответ написан
    2 комментария
  • Где можно почитать/посмотреть о написании dll на c++?

    @res2001
    Developer, ex-admin
    WinAPI учить не надо - бессмысленное занятие - он достаточно большой и весь он вам вообще вряд ли когда-нибудь пригодится. Но надо знать где искать по нему информацию.
    По написанию DLL на С++ ... погуглите в конце концов. Там есть свои тонкие моменты, но это не сложно.
    Вот что нагуглилось сходу:
    https://learn.microsoft.com/ru-ru/cpp/build/walkth...
    Ответ написан
    Комментировать
  • Как написать функцию sin из библиотеки math.h в Си?

    @res2001
    Developer, ex-admin
    У вас sum2 не инициализируется в начале, а в цикле вы туда уже чего-то прибавляете.
    Как думаете какой результат будет возвращен функцией? Зависит от того что лежало на стеке где теперь лежит sum2, а лежать там может все что угодно.
    Ответ написан
    Комментировать
  • Как сделать one to many связь между таблицами?

    @res2001
    Developer, ex-admin
    Достаточно, чтоб в таблице "many" не было ограничений на уникальность для поля, по которому связываются таблицы.
    Ответ написан
    Комментировать
  • Как работает брандмауэр Windows?

    @res2001
    Developer, ex-admin
    Эти разрешения трансформируются в правила для входящих и исходящих пакетов. Именно эти правила заставляют фаервол совершать какие-то действия - пропускать или блокировать трафик.
    Можно настраивать эти разрешения программ, а можно непосредственно настраивать правила для входящих/исходящих пакетов.

    Принцип работы прост: каждый входящий или исходящий пакет проверяется по списку правил, в правилах заданы условия, если пакет проходит по условиям, то выполняется действие, которое назначено правилу (разрешить/блокировать).
    Для лучшего понимания работы вам лучше смотреть не в это окно, а в "Windows Defender Firewall with Advanced Security" - введите в поиске.
    Ответ написан
  • Какие есть надёжные способы замены ip (типа vpn)?

    @res2001
    Developer, ex-admin
    Самый надежный вариант - свой собственный ВПН.
    Арендуйте VPS в интересующей вас стране, придется найти способ оплачивать услугу, настройте свой собственный ВПН и ходите через него. OpenVPN Или WireGuard настраиваются достаточно просто.
    Ответ написан
  • Как исправить ошибку в программе на С++, чтобы не вызывалось необработанное исключение или кнопка останова?

    @res2001
    Developer, ex-admin
    1. у вас в конструкторе выделяется динамическая память. Но деструктора у вас нет. Память не освобождается, после удаления объекта - утечка.
    2. Еще про конструктор. Внимательно посмотрите на строчку: coord = new double[size];.
    Чему равно значение переменной size в ней? Какого размера выделится буфер?
    3. Конструктор копирования реализован не правильно. Если вы создадите объект с его использованием, то он будет использовать тот же блок динамической памяти, что и исходный объект. Ни к чему хорошему это не приведет, вряд ли вы рассчитывали на такое поведение.

    На счет ошибки компилятора - хорошо бы увидеть текст ошибки. Условие в operator<< действительно всегда ложно. Надо сравнивать с vec.size - 1
    Ответ написан
    Комментировать
  • Почему tellg() неявно приводится к int при инициализации int, но не может быть сложенным с int?

    @res2001
    Developer, ex-admin
    попробуйте так: 2 + telg() На gcc вроде прокатывает без предупреждений.
    Но это опасно, т.к. tellg может вернуть ошибку (-1) и она в этом случае останется а) необработанной б) ваш код не поймет, что была ошибка - выражение вернет корректное положительное не правильное значение. Возможно именно по этому выдается предупреждение (в GCC предупреждение, а не ошибка).
    Ответ написан
    Комментировать
  • Как правильно написать функцию принимающую универсальную ссылку?

    @res2001
    Developer, ex-admin
    ifs может быть const

    Поток не может быть const. Когда вы читаете/пишете в поток у него меняются внутренние атрибуты. В const потоке вы ничего не сможете изменить, а следовательно ни писать туда ни читать из него не сможете - зачем он такой красивый нужен?
    как я понял нужно использовать и std::forward, но не понимаю куда его вписать корректно

    Если вы будете поток дальше передавать в какие-то функции, то заверните поток в forward. То же самое, если надумаете возвращать поток из функции.
    Ответ написан
  • Error LNK2019: ссылка на неразрешенный внешний символ public: void __cdecl Window::create(void)?

    @res2001
    Developer, ex-admin
    но window.cpp задумывается как часть библиотеки которую можно потом установить

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

    @res2001
    Developer, ex-admin
    Ситуация вполне вероятна. На сколько я знаю, нет гарантии, что поток после создания сразу получит процессор для выполнения.
    Делайте проверку в get в цикле, если x.load вернул false, то можно вызвать yield(), чтоб напрасно не жрать процессор в цикле.
    Ответ написан
  • Как развернуть второй сервер OpenVPN на одном железе?

    @res2001
    Developer, ex-admin
    В винде по умолчанию при установке openvpn добавляется только 1 виртуальный tun/tap адаптер, чтоб запустить несколько экземпляров openvpn нужно для каждого экземпляра использовать свой виртуальный адаптер.
    В комплекте установки есть утилита tapctl, позволяющая добавлять адаптеры, а так же в меню пуск есть ярлыки для запуска этой утилиты с правильными параметрами.

    На самом деле в актуальной версии openvpn по умолчанию устанавливается 3 виртуальных адаптера, но каждый из них разного типа: tun, tap, dco. Похоже можно использовать разные типы адаптеров, изменив опцию dev.
    На сколько помню, раньше был только 1 тип адаптера: tun. Его я и использовал всегда. На сколько хорошо работают остальные типы адаптеров под виндой - не в курсе.

    Кроме того OpenVPN устанавливает свои службы, которые удобно использовать на серверах, когда нужно, чтоб openvpn стартовал автоматически при старте винды, без вмешательства пользователя.
    Ответ написан
    4 комментария
  • Как попасть в IT школьнику?

    @res2001
    Developer, ex-admin
    Если в твоем городе есть нормальный ВУЗ, то иди учись. Если нет, то стоит поискать куда ты можешь поехать учиться. У тебя сейчас единственная возможность в жизни получить бесплатное образование. Скорее всего такого подарка судьбы больше не будет никогда. Бывают, конечно, исключения.
    Обучение это не столько "новые технологии" программирования. Это еще и математика и прочие предметы, которые хорошо ставят мозги на место. Это то же нужно, если и не для программирования, то для собственного развития.
    Но самое главное, чему ты должен научиться в ВУЗе - учиться самостоятельно. Впрочем, похоже, это у тебя не плохо получается. Значит будешь оттачивать навык :-)
    Желаю удачи!
    Ответ написан
    5 комментариев
  • Как вывести два сервиса в сеть из одного/двух ip?

    @res2001
    Developer, ex-admin
    1 и 2. Делайте проброс разных портов в NAT на роутере на разные внутренние сервисы. Т.е. номер внешнего порта будет определять внутренний адрес (и порт) сервиса.
    Ответ написан
    4 комментария
  • Вылетает программа на C++ с кодом -1073741571 (0xC00000FD)?

    @res2001
    Developer, ex-admin
    Если вы под виндой, то запустите программу в дебагере без точек останова. Когда произойдет ошибка, то дебагер остановится в том месте где произошла ошибка, перейдете по стеку вызовов к вашему последнему вызову (т.к. ошибка может проявляться где-то в коде стандартной библиотеке) и начнете анализировать это место программы.

    В линуксах надо включить создание coredump в ОС, выполнить программу, получить файл coredump и проанализировать его в gdb. Схема анализа кода та же, что под виндой.

    Возможно у вас выход за пределы массива. При анализе внимательно смотрите на используемые индексы и размеры выделенного вектора к которому идет обращение.

    Результаты вашего анализа можете скинуть сюда.
    Ответ написан
    Комментировать
  • Как избежать коллизии по данным?

    @res2001
    Developer, ex-admin
    Сделать в таблице уникальный индекс по одному или нескольким полям, которые образуют уникальный ключ для объекта. В этом случае при попытке создать в базе запись с таким же уникальным ключом будет ошибка.

    Вообще нагрузка 100% - это повод задуматься о масштабировании приложения или оптимизации базы, не понял где у вас нагрузка 100%.
    Необходимость масштабирования не отменяет создания уникального индекса.
    Ответ написан
  • Для чего внутри связного списка нужен массив?

    @res2001
    Developer, ex-admin
    Видимо планируется хранить список на медленном устройстве хранения (на диске). Тогда такое построение связного списка вполне оправдано - за одно чтение можно прочитать несколько блоков данных.
    Возможно примерно таким же способом хранятся таблицы в СУБД. Называться это может по разному.
    Так же в СУБД часто применяют b-tree для хранения индексов, в этом дереве то же хранится несколько элементов данных в одном узле.
    Ответ написан
    Комментировать
  • Что делать с ошибкой unresolved external?

    @res2001
    Developer, ex-admin
    У вас не включен в сборку Firm.cpp. Поэтому все что в нем определено и используется в unit1.cpp будет вызывать ошибку.
    Как собираете проект?
    Ответ написан
    Комментировать
  • Как бы упростить непростое сравнение строк?

    @res2001
    Developer, ex-admin
    Если в отдельной таблице базы хранить еще и предварительно посчитанные количества нулей для каждой позиции во всех строках, то задача сократится до 1 прохода по символам новой строки.
    При добавлении/удалении строк, надо будет модифицировать и таблицу с количеством нулей.
    Ответ написан
  • С++ На всех ли платформах одинаковая точность операций с float?

    @res2001
    Developer, ex-admin
    Форматы чисел с плавающей точкой стандартизованы IEEE754.
    Скорее всего, операции выполняемые процессором над числами с плавающей точкой будут давать одинаковый результат на разных платформах.
    Но вот программные реализации различных математических алгоритмов из стандартной библиотеки, типа того же sqrt и т.п., могут отличаться.
    Для гарантии, вам нужно использовать для этих целей какую-то единую библиотеку для всех платформ, а не стандартный math.h.
    Ответ написан
    1 комментарий