Задать вопрос
  • Почему разные кавычки обрабатываются по-разному?

    @MarkusD Куратор тега C++
    Maxim Siomin , а ты документацию по строковым литералам изучил?
    В С++ существуют термины символьного и строкового литералов. Обозначаются они по-разному и означают разное.

    std::cout << 'Hello, world'
    Тут 'Hello, world' вообще не является ни строковым, ни символьным литералом. Это - значение с типом int.
  • Как сделать скриншот определенной области по координатам?

    @MarkusD Куратор тега C++
    aquario-cloud , это ты задание такое для других задаешь?
  • Как понять вызов функци внутри другой функции с разным количеством параметров?

    @MarkusD Куратор тега C++
    Денис Загаевский, ну смотри. Ты открыто спросил о моем мнении и я его открыто высказал. Пройдись по моему ответу и найди, чисто для себя, в каком именно месте, в буквальном смысле, какими словами я спрашиваю твоего мнения.
  • Как понять вызов функци внутри другой функции с разным количеством параметров?

    @MarkusD Куратор тега C++
    Денис Загаевский, а тебя о твоем мнении кто-нибудь спрашивал? :)
    В моем мире твое непонимание выглядит "странно и нелепо". Тебе стоило бы сразу написать что ты не смог понять излагаемую мной систему. И это нормально что не смог. Такое с людьми иногда случается.
    Стесняешься своих непонимашек? Не стоит. :)
  • Как правильно указывать аргумент в цикле while C++?

    @MarkusD Куратор тега C++
    OCCASS OCCASSOVICH , тебе стоит показать весь код вокруг цикла.
    C2659 говорит о том, что ты пытаешься использовать имя функции как имя переменной. Это, в целом, абсолютно недопустимо.
    В стандартной библиотеке уже есть функция с именем exit, но объявлена она в пространстве std, которое ты мог не подумавши раскрыть в глобальное пространство.
    Еще в стандартной библиотеке C есть функция с именем exit. Ты вполне мог воспользоваться заголовком, где она описана.
    ::exit является полной квалификацией имени с расположением в глобальном пространстве. Имя функции с большим приоритетом будет выбрано из глобального пространства.

    В любом случае, на твой вопрос сейчас, без кода, ответить возможным не представляется.
  • Как задать поведение препроцессора C в GCC?

    @MarkusD Куратор тега C++
    q2zoff, что это считается плохой практикой - сильно устаревшее заблуждение.
    Сегодня у тебя есть три базовых тулчейна: msbuild, clang и gcc. У каждого из них есть своя документация, в которой изложены списки всех поддерживаемых прагм.
    Прагмы не стандартизированы потому что в них нет смысла с точки зрения обобщенной виртуальной машины, напрямую выполняющей код c++. Стандарт описывает именно такую виртуальную машину. В частности, #pragma once буквально невозможно специфицировать в рамках стандарта и поэтому она не может быть стандартной.
    При этом довольно обширный набор прагм уже давно является универсальным между всеми тулчейнами.

    Плохой практикой является не использование прагм, а слабое понимание собственноручно написанного кода. Поэтому, определяем свой набор тулчейнов и изучаем поддерживаемые в них прагмы, необходимые в данный момент.
  • Почему не работает glUseProgram?

    @MarkusD Куратор тега C++
    PRIYD , ты изучил описание ошибки C3861?
    Выполнил ли ты предложенные там действия?

    Дело в том, что от кода шейдера тут ничего не зависит, т.к. из точки обращения glUseProgram недоступно объявление этой функции. Исправлять надо достижимость объявления.
  • Gamedev что лучше использовать для создания игры?

    Neusoon , ... Но что бы это было ... После пару дней тестов ... получалась не плохая нагрузка ... Так же мое GPU ... это все таки подгрузка ... подгрузка файлов и мелких других загвоздок ... остальное не плохо работает ... и правда не плохая ... Возможно кто то простые ... при создание игры ...

    Это не считая ошибок пунктуации и ошибок смысла. Ты ведь хочешь сделать игру, основной упор в которой будет на чтении. При создании игры нужно максимум внимания обратить на свою орфографию. Или у игроков кровь из глаз польется.

    По SDL/SFML выкладки у тебя максимально некорректные. Одна текстура на экране ни о чем не говорит. Ты ограничение FPS/UPS сделал?
  • Как задать поведение препроцессора C в GCC?

    @MarkusD Куратор тега C++
    q2zoff , для этих целей существует стек макроопределений.
    Ты пробовал его использовать?
  • Как понять вызов функци внутри другой функции с разным количеством параметров?

    @MarkusD Куратор тега C++
    Денис Загаевский, в предложении каждое слово стоит на своем месте, раскрывая мысль предложения.

    Тебе ведь понятно что написано в первой строчке? Давай честно и без подколов.
    Когда ты читаешь код, будет хорошо если ты точно также в коде увидишь раскрытие мысли этого кода.
    С другой стороны, если ты не можешь внятно выразить свою мысль - выбрось ее из головы. Если ты не можешь внятно объяснить мысль своего кода - выбрось его.

    Какую там мысль хотел выразить создатель этого кода? К слову сказать, у автора вопроса объявление AssertEqueal является неполным. Это шаблон функции, но описания шаблонных параметров нет.
    Автор хотел взять два экземпляра заведомо разных типов, сравнить их через ADL-доступный оператор эквивалентности, а на основании результата сравнения или выполнить тело функции, или отказаться от его выполнения.
    Эта функция напоминает бинарную логическую операцию, для которой характерно наличие левого и правого аргументов. Более того, условность выполнения тела функции явно говорит о том, что один из операндов является константным, т.е. эталоном. То есть, это функция проверки соответствия эталону.
    На уроках математики в школе всех нас приучили к тому что слева нужно писать неизвестную, а справа - константу. ax^2 + bx + c = 0. Решаем, пишем: x = 42. И так далее.
    Логические операции интуитивно понятнее, когда левый операнд является переменной, а правый - константой.
    Assert - переводится как "Утверждать". Утверждать что-то. Значит, где-то должно быть утверждение. Но у AssertEqueal этого утверждения нет. Более того, имя функции переводится как "Утверждать равным". Чему равным?

    Эта функция ничего не утверждает. Она, согласно своей мысли, ожидает эквивалентности двух значений чтобы выполнить свое тело. А в теле функции должна быть остановка процесса.
    Функцию стоит назвать TerminateOnDifferent - выпилиться по разнице значений.
    Левый операнд - это Condition, условие. Правый - это Reference, норма/эталон.
    В имени глобальной функции слово Terminate однозначно читается в контексте процесса. Прозрачно и то, что по наступлении эквивалентности выхода из этой функции не будет. Следовательно, все, что можно еще сделать, это передать семантику терминации в виде причины. Третий параметр - это Reason. Вот так, без всяких лишних hint и Msg, т.к. аргумент самодокументируется своим типом.

    В результате выглядеть должно вот так:
    template< typename TCondition, typename TReference >
    void TerminateOnDifferent( TCondition&& condition, TReference&& reference, const std::string_view reason )
    {
        if( condition == reference )
        {
            return;
        }
        
        std::cout << "Termination happened due to reason: " << reason << "." << std::endl;
        std::terminate();
    }
  • Как понять вызов функци внутри другой функции с разным количеством параметров?

    @MarkusD Куратор тега C++
    ReD, так это нормально. Функции на то и существуют, чтобы конкретизировать аргументы вызова других функций. Тут true вставлена как магическое значение. В другом месте новый параметр будет вычислен. Где-то еще значение будет прочитано из сетевого сокета или файла.
  • Как понять вызов функци внутри другой функции с разным количеством параметров?

    @MarkusD Куратор тега C++
    ReD , а что конкретно тебе тут непонятно?
    В целом, продемонстрированный тобой код является высоким образчиком невежества и крайней небрежности в исполнении кода. В буквальном смысле, без запуска и трассировки по этому коду ничего сказать нельзя. Такой код принято полностью стирать и восстанавливать его логику максимально понятным способом.
    В чем конкретно заключается образцовая небрежность. В этих вот T, u, в самом AssertEqual - ничего не отражающих именах. В изломанной структуре кода, в кривом выравнивании блоков. Только hint отражает свою суть, однако ничего не означает в контексте конструкции утверждений.
    Поэтому, в какой-то степени я могу догадаться, что конкретно тебе непонятно. Но будет лучше чтобы ты сам все описал как можно подробнее.
  • Ошибка компиляции g++ (Ubuntu). Как исправить?

    @MarkusD Куратор тега C++
    VitiaKotik , прошу повторно обратить внимание на П3.8 регламента работы сервиса.
    Текст сообщений об ошибках можно скопировать из окна Build Output. Не нужно размещать мыльные картинки с нечитаемыми надписями.
  • Откат изменений - как реализовать?

    korner-brazers, ну давай подкину еще сам запрос, которым это все легко находится. :)
  • Откат изменений - как реализовать?

    Илья, в качестве дополнительного подтверждения: [1], [2].
    Через State тоже делают, это в локальной терминологии будет называться Snapshot. Метод подходит там, где состояние имеет небольшой размер. FSM, при этом, обретает вырожденный линейный характер, что немножко намекает на плохую пригодность State для решения этой задачи.
  • TCP - как создать свой пакет?

    @MarkusD Куратор тега C++
    VitiaKotik, что в Википедии написано, я тоже знаю. Меня интересует твое личное понимание.
    Как конкретно ты представляешь себе "пакет"? Ну и давай еще выясним, какое у тебя понимание протокола TCP. Как он работает и в каком виде он передает данные?
    Это все будет важно для того чтобы правильно ответить на твой вопрос.
  • TCP - как создать свой пакет?

    @MarkusD Куратор тега C++
    VitiaKotik , опиши твое понимание пакета для TCP.
    Сейчас мне будет важно именно твое личное мнение, именно твое личное понимание термина "пакет".
  • Как подключиться к SQLite3?

    @MarkusD Куратор тега C++
    xtensp , покажи строку в коде, где у тебя ошибка компиляции.
    Дополнительно, покажи как у тебя подключается библиотека.