Задать вопрос
  • Предопределено ли присвоение типу данных значения, не помещающегося в этот тип данных?

    @res2001
    Developer, ex-admin
    В стандарте С11 п.6.5.4 пишут, что лишние байты будут отброшены ("removes any extra range and precision").
    Какой результат будет, если типы знаковые и значение а отрицательное и не влазит в диапазон целевого типа не уточняется.
    В плюсовом стандарте я что-то ничего не нашел на эту тему, но по факту поведение аналогично Си.
    Ответ написан
    Комментировать
  • Задание создания динамического массива до первого отрицательного числа, как это сделать?

    @res2001
    Developer, ex-admin
    Лучше использовать std::vector. Просто вводите числа в промежуточную переменную. После ввода каждого числа проверяете отрицательно ли оно, если нет, то добавляете число в вектор. Если число отрицательное и вектор не нулевого размера, то сортируете вектор с помощью std::sort и выводите вектор на экран. Все.

    Вместо вектора можно использовать и "сырые" Си массивы в динамической памяти. Алгоритм тот же, но при добавлении каждого нового числа вам нужно выделить новый массив большего размера, скопировать содержимое старого в новый, старый удалить. Для перевыделения массива можно использовать realloc(), она выполняет все эти операции. Вектор скрывает эти операции от вас и делает все то же самое, но без вашего участия, так же в векторе есть оптимизация, позволяющая делать меньше перевыделений памяти.
    Ответ написан
    Комментировать
  • Как получить вывод команды с терминала в переменную?

    @res2001
    Developer, ex-admin
    Через файл - это самый простой вариант.
    Более технологичный вариант - запускать процесс с перенаправлением потоков stdin/stdout/stderr в каналы (pipe).
    В этом случае можно в режиме "on-line" получать вывод от запущенного приложения и генерировать вход для приложения. Этот сложнее, но дает гораздо больше гибкости в работе с запускаемым процессом.
    Ответ написан
    Комментировать
  • Как добавить Lua дополнения в игру?

    @res2001
    Developer, ex-admin
    Кроме Lua добавляют и Python и другие интерпретируемые языки.
    Это называется "встраивание Lua" в свое приложение (embeded Lua, embeded Python, ...). Гуглите в этом направлении.
    В официальной документации по питону, есть отдельный раздел на эту тему. Видимо, то же и в Lua должно быть.
    Ответ написан
    6 комментариев
  • Как запустить сеанс от другого пользователя в окне на том же самом компьютере в Windows 7 Prо?

    @res2001
    Developer, ex-admin
    У десктопной винды может быть активен только один сеанс, это лицензионное ограничение. Хотите много сеансов - нужен Windows Server.
    Ограничение можно обойти с помощью RDPWrapper. Он позволяет подключаться по RDP, не отключая консольный сеанс. Но это нарушение лицензии.
    Хотя кому в наше время интересны ограничения какой-то иностранной компании из недружественной страны :)
    Ответ написан
    1 комментарий
  • Как данные перемещаются в сети интернет, всегда конвертируются в кадры Ethernet или остаются в пакетах IP?

    @res2001
    Developer, ex-admin
    Если смотреть только на Ethernet, то он представляет плоскую сеть, где все узлы равноправны и могут обмениваться трафиком друг с другом на прямую без всякой маршрутизации. Ethernet ничего не знает о других сетях. Для него есть только одна сеть.
    Поэтому для взаимодействия между разными сетями нужен более высокоуровневый протокол, который позволяет отличить адреса "своей" сети, от "чужих" адресов (обеспечивает маршрутизацию между сетями). Это IP. Датаграммы IP вкладываются в поле данных Ethernet.
    Над IP есть TCP и UDP. TCP гарантирует доставку пакетов, UDP - не гарантирует. Общее между ними то, что оба протокола позволяют идентифицировать конечные приложения на хосте получателя и отправителя по номерам портов. Сам по себе IP не позволяет этого делать, для него конечной точкой является хост в сети, средств идентификации приложений внутри хоста в IP нет. TCP и UDP пакеты вкладываются в поле данных IP пакета.
    Ну и далее поверх TCP и UDP куча прикладных протоколов, которые решают какие-то специфические задачи. Эти прикладные протоколы точно так же вкладываются в поле данных протоколов TCP или UDP.

    И нет никакой конвертации и преобразования, просто пакет вышележащего протокола является данными для пакета нижележащего протокола (инкапсуляция). Про инкапсуляцию смотри аналогию CityCat4 о картошке.
    Ответ написан
  • Можно мне книг по шаблонному программированию в С++?

    @res2001
    Developer, ex-admin
    Для теории есть книга "Шаблоны С++".
    Так же можно посмотреть исходники STL там шаблоны очень активно применяются. А так же и другие свободные библиотеки, например boost.
    Ответ написан
    1 комментарий
  • Как читать вывод git diff?

    @res2001
    Developer, ex-admin
    Файл был переименован. index, видимо, показывает коммит где файл появился первоначально с правами на файл 0644 (стандартные права файловых систем Unix). 10 - "обычный файл".
    Утилита stat выводит такую же инфу о правах, но в шестнадцатиричном виде, а тут восьмеричный.
    Вместо 10 может быть еще 12 - ссылка, и возможно еще какие-то варианты.

    Три минуса и три плюса - стандартное для diff обозначение для сравниваемых файлов. Типа первый файл это ---, второй файл +++.
    Цифры в @@ отрицательная - это "строка, колонка" для первого файла, положительная - для второго. Указывают место где файлы различаются.
    Ответ написан
    Комментировать
  • Почему MinGW не видит winapi функцию?

    @res2001
    Developer, ex-admin
    С чего вы это взяли что компилятор не видит функцию?
    Если бы это было так, то ошибка была бы что-типа "undefined refference" или "implicit declaration".
    У вас похоже ошибка где-то выше по коду, а в этом месте компилятор просто понял, что тут ошибка.
    Ответ написан
  • Как получить текущий путь в BAT файле?

    @res2001
    Developer, ex-admin
    Именно так и узнавать текущий путь: %CD%
    Это не важно где лежит батник, т.к. исполняется не сам батник, а cmd.exe. Т.е. когда вы 2ПКМите на батнике, лежащем на раб.столе запускается команда: cmd.exe /c c:\users\user\Desktop\file.bat
    При этом путь где лежит батник никакого отношения к текущему пути не имеет. cmd.exe обычно запускается с текущим каталогом %SystemRoot%\System32.
    Чтоб перейти в каталог, где лежит батник, используйте команду: cd /d "%~dp0"
    Пути можно получать из параметров батника, указанным способом, то же самое можно делать для переменных цикла, и параметров процедур. Список доступных модификаторов (буквы после %~ доступны в описании команд call и for.
    Ответ написан
    1 комментарий
  • В чём отличие git bash и просто bash?

    @res2001
    Developer, ex-admin
    Это обычный bash, в комплекте с которым идут утилиты необходимые для работы gitа, в т.ч. и сам консольный git. Ничего лишнего.
    Там легко может не быть каких-то утилит, которые в bashe под linux есть. Они не являются частью bash или git, но являются частью linux.
    Ответ написан
    3 комментария
  • Как исправить ошибку LNK2019?

    @res2001
    Developer, ex-admin
    В интернетах пишут, что надо добавить еще opengl32.lib
    Ответ написан
  • Папка " Пользователи ", ее возможно перенести из диска С на диск Е?

    @res2001
    Developer, ex-admin
    Можно перенести и на рабочей системе. Но есть нюанс - в папке содержатся не только профили реальных пользователей, но и All Users, Default, ... Эти специальные профили, лучше оставить на своих местах.
    Описывал ручной вариант переноса тут не однократно, вот мой последний ответ по этому поводу: https://qna.habr.com/answer?answer_id=2161662#answ...
    Там внутри есть ссылки на более полные ответы.
    Ответ написан
    Комментировать
  • Есть ли смысл в уточнении типов данных чисел? И что это даст?

    @res2001
    Developer, ex-admin
    Смысл в этом есть. Будет меньше расходоваться память стека.
    Но только в том случае, если вы программируете для системы с ограниченными ресурсами (какой-нибудь эмбедед и т.п.). Там подобная экономия может быть оправдана, да и то не всегда. В обычных приложениях для винды или линукса подобная экономия "на спичках" никакого эффекта не даст.
    Ответ написан
  • Почему нет данных в хэш-таблице?

    @res2001
    Developer, ex-admin
    malloc не зануляет выделенную память. После выделения mallocом в выделенной памяти содержится мусор.
    А у тебя в ht_hasItem определение занят ли элемент идет через сравнение с NULL. Когда выделил array надо обнулить массив memsetом или использовать calloc для выделения.
    Ответ написан
    2 комментария
  • Какая версия linux оптимальна для обучения?

    @res2001
    Developer, ex-admin
    Kentavr16, Ставь arch или gentoo - будет максимальное погружение в трудности практически с первого шага. Комьюнити в арче большое и мануалов то же хватает, в т.ч. и на русском. Будет трудно, но зато можно довольно быстро погрузиться в линукс.
    Ubuntu - для домохозяек - многое работает из коробки и много чем можно управлять из граф.оболочки. Задачи для обучения придется придумывать самому :)

    Вообще выбор дистрибутива не принципиален, на самом деле.
    Но есть некоторые нюансы.
    Сейчас во многих дистрибутивах системным менеджером является systemd. Но могут быть и другие варианты: systemv, upstart, ...
    В дистрах порожденных от debian пакетный менеджер обычно apt.
    В дистрибутивах от redhat - rpm.
    В arch - pacman.
    В gentoo - софт собирается из исходников, похоже на систему портов во FreeBSD.

    От системного менеджера зависит способ как вы будете управлять службами.
    От пакетного менеджера - как вы будете устанавливать софт и обновлять систему.
    Это достаточно важные вещи в администрировании. Обычно к чему сразу привыкнешь тот вариант и будешь использовать в дальнейшем. Если пакетные менеджеры все более-менее похожи друг на друга, то системные менеджеры могут отличаться своими подходами.
    Графическая оболочка не важна, т.к. любой линукс позволяет ее менять после установки. А кроме того очень многие вещи в линуксе администрируются правкой конфигов, а не тыканьем кнопок.
    Поменять системный менеджер уже не так просто и это тянет на собственный дистрибутив.

    Еще один момент, отличающий разные дистрибутивы - политика обновлений. В некоторых дистрах перед релизом проходит период тестирования и т.п. (debian, ubuntu lts), в других - выдают на гора все самое горячее, не парясь о последствиях для пользователей (arch), есть и промежуточные варианты.

    Лично я использую убунту, т.к. изначально ее ставил сразу для работы, а не для обучения. И лишние проблемы были ни к чему. Обучался в процессе. Уже можно было бы и поменять на что-то, но сейчас не вижу в этом смысла.
    Ответ написан
    9 комментариев
  • Как можно задать перенаправление папки ProgramData при работе с RDS?

    @res2001
    Developer, ex-admin
    Путь к ProgramData задается в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.
    Но менять расположение в работающей винде не стоит, т.к. там полно "внутренних" ссылок, а так же на ProgramData есть ссылки в других местах. При переносе большая часть ссылок будут недействительны. Трудно даже предположить, что отвалится после подобного действия.
    Вижу единственный рабочий вариант - изменение расположения ProgramData в процессе установки винды с помощью файла ответов, может есть и другие варианты задать новое расположение папки при установке.
    Но, на сколько я понимаю, перенос ProgramData вам ничего не дасть, т.к. эта папка одна для всех пользователей, она и в новом месте будет такой же.

    По AppData. Перенесите целиком профиль пользователя. Вместе с ним перенесется и пользовательский AppData. Ручной перенос профиля описывал тут несколько раз.
    Как вариант - перенести конкретную папку из AppData и создать на прежнем месте ссылку в новое местоположение.
    Но, пользовательская AppData находится в пользовательском профиле и она уже изолирована от других пользователей. Так что о какой дополнительной изоляции идет речь.

    И еще. Динамические библиотеки (на сколько я понял речь идет о такой библиотеке) открываются в режиме многопользовательского доступа. Т.е. несколько программ могут легко использовать одну и ту же библиотеку. Это так работает всегда на системном уровне и изменить это нельзя.
    Это значит, что внутри библиотеки блокируется какой-то другой ресурс, который становится не доступным другим пользователям. Вам надо выяснить у разработчика программы что там блокируется и как с этим бороться.
    Ответ написан
  • Будет ли скомпилированный код C++ работать на всех архитектурах процессора?

    @res2001
    Developer, ex-admin
    Даже бинарник для х64 не будет работать под х32, что уж говорить о принципиально разных архитектурах.
    В исполняемом файле содержатся машинные команды для конкретной архитектуры процессора.
    Для другой архитектуры нужен другой исполняемый файл.
    То же самое актуально и для разных ОС (бинарники для линукс и винды не совместимы). Но, обычно, есть варианты запустить бинарник от другой ОС - виртуализация, wine в линукс, WSL в винде.

    Более того, например, если у вас приложение х64 и вы используете какую-то специфическую фичу процессора, которая есть только в определенных моделях процессора, то приложение будет корректно работать только на процессорах поддерживающих эту фичу. Если нужно, в приложении можно предусмотреть проверку процессора и если фича не поддерживается использовать какую-то универсальную реализацию.
    Ответ написан
    Комментировать
  • Как структурировать код?

    @res2001
    Developer, ex-admin
    Одинаковые участки кода надо выделить в отдельные функции, передавать в функции нужные аргументы и возвращать результаты. Частично это у вас уже сделано с f21, но результат можно улучшить.
    Ответ написан
    Комментировать
  • Как или где онлайн можно научиться кодить игры правильно (мультитрединг, структуирование итд)?

    @res2001
    Developer, ex-admin
    Читать книги и статьи про параллельное программирование, архитектуру ПО, паттерны проектирования. Разбираться с непонятными вопросами, применять прочитанное в своих проектах.
    Никто не сделает из тебя хорошего разработчика, кроме тебя самого.

    По видео курсам:
    По параллельному программированию есть хорошие лекции на https://compscicenter.ru/ лекции ведет Евгений Калишенко.
    Хорошие лекции на эту и другие темы связанные с программированием выкладывает канал "Лекторий ФПМИ" на ютубе.
    В перечисленных вопросах не стоит акцентировать внимание на разработке игр, т.к. все это применяется повсеместно в проектах любой направленности.

    К перечисленным темам могу добавить еще несколько, на которые стоит потратить свое время: сетевое программирование, асинхронное программирование, использование СУБД.
    Ответ написан
    4 комментария