• Как сделать constexpr strtol?

    @dima20155
    you don't choose c++. It chooses you
    Вроде, нет никакой сложности сделать compile-time strtol
    https://godbolt.org/z/z1o7f63K1
    Ответ написан
    8 комментариев
  • Как объединить цифры жк экрана с драйвером ht1621b?

    @dima20155
    you don't choose c++. It chooses you
    Для объединения двух цифр в одну вам нужно просто в своей функции принимать число не больше 99, разбивать на цифры и выводить на соответствующие экраны.
    примерно так:
    void numberToHT1621(int number) {
        if (number > 99) {
            number &= 0xffff;
        }
        int first_digit = number % 10;
        int second_digit = number / 10;
        
        // printf("%d %d", second_digit, first_digit);  // for debug
        
        // write number on display
        Write_1621(27, first_digit);
        Write_1621(29, second_digit);
    }


    Для таймера же я бы предложил вам реализовать функцию (а может даже класс?), которая каждые N тиков таймера микроконтроллера (или же при каждом прерывании аппаратного таймера, если они у вас настроены) будет отображать на дисплее новое число.

    Вот вам ооочень неоптимальный, но рабочий, для микроконтроллера пример взятый абсолютно с полтолка.
    При этом у вас должен быть какой-то цикл событий или что-то ещё, который будет постоянно вызывать updateTimer у данного таймера.

    Среда Ардуино поддерживает аппаратные таймеры, но можно и просто в функции loop постоянно вызывать updateTimer.

    class CountdownTimer {
    public:
        CountdownTimer(int timeInMCUTicks) : time(timeInMCUTicks) { }
        void updateTimer(int ticks = 1) {
            if (time <= 0) {
                time = 0;
                numberToHT1621(time);
                return;
            }
    
            numberToHT1621(time);
            time -= ticks;
        }
    private:
        int time;
    };
    Ответ написан
    Комментировать
  • Как преобразовать char* содержащий символы unicode?

    @dima20155
    you don't choose c++. It chooses you
    Если я правильно понял чего выхотите добиться, то можете попробовать данную библиотеку https://github.com/nemtrif/utfcpp
    Крайне простая и компактная
    Ответ написан
    1 комментарий
  • Как правильно реализовать освобождение памяти выделенной в функции?

    @dima20155
    you don't choose c++. It chooses you
    Все до безобразия просто:
    Вы выделяете память в момент, когда она вам нужна, а удаляете когда эта память вам более не нужна.
    Соотвественно, вам нужна функция array_deinit(), которая возьмет на себя непосильную ношу освобождения памяти в момент, когда вы больше не планируете обращаться к своему двумерному массиву.

    В простейшем случае, в С++ подобный функционал оборачивают в класс, который, в свою очередь, обязательно должен почистить за собой память хотя бы в деструкторе.

    Также в современном С++ не принято использовать new/delete без веской причины (например, вы пишете супер быстрый, современный контейнер, в котором хотите управлять всеми аллокациями самостоятельно), а рекомендуется использовать умные указатели для работы с памятью.
    Ответ написан
    2 комментария
  • Почему нельзя использовать std::function как аргумет шаблонной функции?

    @dima20155
    you don't choose c++. It chooses you
    Потому что lambda != std::functional
    Пример:
    https://godbolt.org/z/YrKc8q5q7

    https://stackoverflow.com/questions/11774277/lambd....
    Ответ написан
    Комментировать
  • Не работает case в switch. Как решить проблему?

    @dima20155
    you don't choose c++. It chooses you
    У вас не хватает break в конце блока case
    Вот пример:
    https://en.cppreference.com/w/cpp/language/switch
    Ответ написан
    Комментировать
  • Как конвертировать изображение в матрицу?

    @dima20155
    you don't choose c++. It chooses you
    Если я правильно понял вы хотите конвертировать jpg в матрицу пикселей.
    Самый простой способ конвертировать jpg в матрицу пикселей:
    https://stackoverflow.com/questions/26230911/openc...
    С cv::Mat можно работать как с матрицей

    Для самописного решения нужно будет потратить весьма не мало времени, чтобы декодировать jpg
    Ответ написан
    Комментировать
  • В чем преимущества использования С++ в embedded?

    @dima20155
    you don't choose c++. It chooses you
    БПЛА, автопилоты сильно сложнее с алгоритмической точки зрения, чем отправить N байт по UART или переложить их в X регистр. Поэтому ответ тут такой же как и на вопрос: Почему для написания современных приложений зачастую используется С++, а не С.
    Опять же, не стоит обобщать: довольно немалое количество компаний пишет свои автопилоты на чистом С из-за сертификации, каких-либо бюрократических требований.
    Ответ написан
    3 комментария
  • Почему в С++ не работают 2 цикла for?

    @dima20155
    you don't choose c++. It chooses you
    У вас в конце первого цикла i = n, соответственно, второй цикл просто не выполнит ни одной итерации, так как условие остановки цикла сразу же истинно
    Ответ написан
    Комментировать
  • Как отобразить байт в двоичном виде?

    @dima20155
    you don't choose c++. It chooses you
    Вывести все, что пришло через последовательный порт:

    for (auto it = res.constBegin(); it != res.constEnd(); ++it) {
        std::cout << bitset<8>(*it).to_string() << std::endl;
    }


    Скорее всего, должен также сработать STL-style code (судя по документации):

    for (const auto it: res) {
        std::cout << bitset<8>(*it).to_string() << std::endl;
    }
    Ответ написан
    Комментировать
  • Почему заведомо неверно if?

    @dima20155
    you don't choose c++. It chooses you
    Потому что символы # перед if else не нужны. При такой записи эти инструкции будут рассматриваться как директивы препроцессора, которые тебе здесь не нужны. В вашем коде происходит проверка дефайнов (#define) предпроцессора. Поскольку вы не объявили что-то вроде:
    #define number 2
    то препроцессор отдает на компиляцию следующий код:
    int number, wrong;
    printf("Введите номер (1-5):\n");
    scanf("%d", &number);
    printf("Вы ввели неправильное число");
    printf("\n%d", wrong);
    return 0;


    То есть в момент исполнения программы просто нет никакого if. В общем, подтяните знание языка
    Вам нужно что-то такое:

    int main() {
        int number, wrong;
        printf("Введите номер (1-5):\n");
        scanf("%d", &number);
        if (number>1 && number<5) {
            printf("Вы ввели правильное число: %d", number);
        } else {
            printf("Вы ввели неправильное число: %d", number);
        }
        return 0;
    }
    Ответ написан
    1 комментарий
  • Как остановить процессы с библиотекой multyprocessing?

    @dima20155
    you don't choose c++. It chooses you
    Избавиться от сообщений об ошибках каких?
    Прежде всего посмотрите хотя бы примеры использования multiprocessing
    https://docs.python.org/3/library/multiprocessing.....
    Вы должны передать в таргет не результат выполнения функции count_vis(), а саму функцию (указатель на функцию, если хотите в терминах С или функтор), то есть count_vis, а следующим аргументом args - то, что принимает ваша функция в качестве входных параметров.

    Вот прям копипаст из документации, посмотрите в чем отличия от вашего кода.
    from multiprocessing import Process
    
    def f(name):
        print('hello', name)
    
    if __name__ == '__main__':
        p = Process(target=f, args=('bob',))
        p.start()
        p.join()
    Ответ написан
    1 комментарий
  • Как исправить данную оишбку?

    @dima20155
    you don't choose c++. It chooses you
    Проблема в операторе []
    А именно в условии
    while (current->next != NULL)
    Должно быть
    while (current != NULL)

    Также у вас данный оператор не возвращает ничего в случае, индекс больше, чем количество элементов в листе, а также не проверяет условие по типу:
    index < size

    Помимо этого у вас ещё много проблем в коде, но если вы начинающий, то что же, учитесь, все впереди. Попробуйти найти себе человека, который сможет скорректировать/отревьюить ваш код, потому в текущем виде он весьма плохо может работать, из-за сырых указателей, таких же сырых выделений памяти, отсутствия её освобождения, непонятно зачем наличие оператора [] у linked list (в стандартной библиотеки их нет не случайно и нужна веская причина чтобы пользоваться оператором [] в linked list )
    Ответ написан
    1 комментарий
  • С++; Дескоптные приложения или веб или операционные приложения?

    @dima20155
    you don't choose c++. It chooses you
    На С++ вы можете реализовать весьма и весьма многое.
    Например, различные графических приложений с использованием SDL, SFML, raylib, QT, imgui и др. (и это лишь самое известные библиотеки/фрейворки).
    Для веба есть oatpp, crow, fastcgi. (довольно большое число сайтов использует nginx, который написан даже не на С++, а на С.)
    Работа с видео: ffmpeg, gstreamer, opencv.

    Если есть желание разобраться с ОС и драйверами, то тут вам дорога в API самих ОС (основа которых тоже зачастую на С писалась). Зачастую драйвера пишут на С/С++ (как и прошивки для различных IoT устройств, которые иногда и нуждаются в драйверах).
    Ответ написан
    Комментировать
  • Устарел ли учебник Стивена Прата по C++?

    @dima20155
    you don't choose c++. It chooses you
    Зависит от ваших целей и вашего уровня. Если ваша цель писать на С++ определенного стандарта, то почему бы и нет. Если вы просто хотите писать на современном С++, то выбирайте учебник, который написан с учетом современных стандартов, ибо с каждым стандартом добавляются дополнительный функционал, который сильно упрощает жизнь.

    Также никто вам не запрещает выучить базовый синтаксис по относительно старому учебнику (базовый синтаксис никто не отменял), а дальше перейти на что-то современное.
    Ответ написан
    Комментировать
  • Как в Cmake папку с срр добавить целиком?

    @dima20155
    you don't choose c++. It chooses you
    Насколько знаю, добавляют cpp руками.
    Вот пример (почти три сотни исходников) https://github.com/oatpp/oatpp/blob/master/src/CMa...
    При правильном подходе вы делаете это лишь 1 раз, так что никакой проблемы это представлять не должно.
    Ответ написан
    Комментировать
  • Почему адреса переменных в памяти стоят в обратном порядке от объявления?

    @dima20155
    you don't choose c++. It chooses you
    С исторических времён повелось, что стек растет в этом направлении. При проектировании основными целями были оптимизация и экономия. Стек растет сверху вниз, а куча в в обратном направлении.
    Ответ написан
    7 комментариев
  • Как оформить код?

    @dima20155
    you don't choose c++. It chooses you
    самое простое - используйте typedef или using
    А также можно написать свой класс-обертку для удобства.
    Ответ написан
    3 комментария
  • Невидимый оверлей для записи видео/демке экрана/скриншотах?

    @dima20155
    you don't choose c++. It chooses you
    Думаю, этот ответ может подсказать. Тут не про Action, а про Fraps, но, думаю, для начала этот подход подойдет.
    https://superuser.com/questions/541467/overlay-get...
    https://learn.microsoft.com/ru-ru/windows/win32/ap...

    Если кратко, то overlay фрапса - это не отдельное окно, а картинка, нарисованная поверх исходного окна игры/программы. Соотвественно, фрапс для записи видео использует исходный кадр игры, а лишь после дорисовывает свой overlay.
    Ответ написан
    Комментировать
  • Почему ломается фрагмент кода?

    @dima20155
    you don't choose c++. It chooses you
    Скорее всего вы тестируете уже на каком-то определенном окне, которое влияет на исполнение python скрипта. Сам по себе код рабочий, протестируйте при полностью закрытых окнах.
    Ответ написан
    2 комментария