Ответы пользователя по тегу C
  • Есть ли задача на распределенные вычисления, которую легко проверить?

    @rPman
    Алгоритмы майнинга криптовалют, любой, тот же биткоин изучен и разложен по полочкам вдоль и поперек.
    У всех у них это свойство - сложно считать но легко проверить.

    По факту это хеширование строки с изменяемой частью (в нее сериализуется число - задача подобрать число чтобы хеш строки с этим числом имел заранее оговоренные свойства, например количество младших нулевых битов хеша).

    Так как у тебя академическая задача, тебе не нужно повторять именно тот самый алгоритм и настраивать инфраструктуру, просто реши задачу поиска хеша от байтового представления числа. Т.е. задача в организаци процесса - управление рабочими потоками/нодами, с раздачей заданий (интервалов в пределах которых каждый воркер будет перебирать хеши) и сбор результатов, включая обработку ошибок.
    Ответ написан
    Комментировать
  • Почему некорректно выводятся символы utf-8 в linux?

    @rPman
    , ccs=UTFxxx это придумка Майкрософт с целью диверсии на стандарты (часть из плана по монополизации мира, успешного).

    В стандарте c++ есть методы конвертации из одной кодировки в другую std::convert....
    Ответ написан
    Комментировать
  • Можно ли запустить программу на языке C в операционной системе FreeDOS или MSDOS?

    @rPman
    visual studio не умеет собирать приложения под msdos

    Из современных компиляторов это умеет gcc https://habr.com/ru/articles/412867/ там в статье ссылка на гит, пример makefile очень простой
    Ответ написан
    Комментировать
  • Вызов функции, экспортируемой из EXE. Как это сделать нормально?

    @rPman
    То есть из любого процесса можно по идее подцепиться к работающей консоли.
    при наличии администраторских прав в windows можно сделать dll injection

    Нормальным такой способ назвать нельзя, пользоваться этим можно только от безысходности.

    Для коммуникации между процессами в пределах одной машины настоятельно рекомендуется использовать shared memory (и как частный случай - memory mapped files) + semaphores, любые другие способы медленнее или используют их для реализации. Сокеты и named pipes везде почему то сильно медленнее (на порядок или даже два). Вот пример взаимодействия приложений на c++ и php там и бенчмарки

    гуглим: Inter-process communication
    Ответ написан
    Комментировать
  • Как скомпилировать C в FASM?

    @rPman
    Поспрашивай этого перца, часть работы он вроде сделал
    MASM to FASM include file converter V1.06
    inc2inc converts MASM include files to FASM include files. The conversion is limited with function prototypes.


    Еще есть проект, не совсем Си
    https://github.com/bubach/Simple-C

    но судя по 'обилию' информации в интернете, тема это странная и однозначно мало кому нужная.
    Ответ написан
    Комментировать
  • Кроссплатформенное программирование на C?

    @rPman
    Ну, про "большинство" мне кажется это преувеличение.

    winapi ничем особым не отличается от других UI библиотек, чуть сложнее кастомизация, достаточно неудобная работа, C-структуры а не классы и старые форматы строк (и проблемы с кодировками). Главное его достоинство - минимальные требования к ресурсам, в том смысле что не нужно использовать какую то прослойку, формирующую свою логику и способ рисования UI только чтобы проще его было кастомизировать.. но если тебе нужен только голый функционал, тянуть весь этот лишний мусор психологически неприятно.
    Когда то очень давно
    , впечатлившись возможностями delphi и успешными потугами msvc сделать разработку UI удобным, пробовал реализовать некую IDE, позволяющую рисовать формочки и генирирующую чистый winapi код для их создания (никаких библиотек), попытка была так себе но идея витает до сих пор (надобности в этом теперь нет).

    Ответ на вопрос - использовать libwine
    Ответ написан
    4 комментария
  • Есть ли что то вроде api, который позволял бы компилировать программу из под исполняемого файла?

    @rPman
    почему нет, все есть, та же libcxx

    так же для работы с исходниками существуют библиотеки, позволяющие проанализировать код и работать с его структурой, например для поиска и рефакторинга (на их основе делают ide)
    Ответ написан
    Комментировать
  • Нормален ли такой код?

    @rPman
    'магические константы' - что такое 9 или 10?, мне то понятно но чтобы их понимать нужно изучать код, размеры области нужно определить в переменные или константы, приучаться надо с самого начала к тому чтобы такого не было. То же самое с символами кнопок управления, определи для них переменные, пусть сначала это будут константы, заданные в коде, зато позже будет проще сделать изменяемые настройки.

    Отсюда кстати баг, ширина у тебя при определении буфера карты определена как 20 а при заполнении экрана - 'стенками' забита строкой в 10 (хотя ожидалось что будет еще один цикл, заполняющий посимвольно строку).

    Правильно - определить буфер как содержимое стенок # и заполнить его однократно вне игрового цикла (тут можно и другие препятствия расставить, например сделать лабиринт), не важно константами или алгоритмом.

    А в бесконечном цикле просто выводить содержимое map и уже во время вывода проверять x,y положения 'игрока' и выводить его на экран вместо символа карты. Достоинство такого подхода - карта может состоять не только из символов стенок но и любых других, проходимых.

    ну и красивости раскидай по функциям вывод экрана и обработку клавиш управления, так же внутри вызова каждой клавиши проверку на стенку вынеси в вызов отдельной функции (в параметрах - символ карты), возвращает boolean, является ли символ проходимым, благодаря этому позже проще будет добавить другие символы стенок

    Следующим шагом x,y определи структурой, если продолжать дальше, в идеологии объектного программирования (да я вижу что это С, но простой вызов метода у структуры/класса сделать можно) в этой структуре определи функции, описывающие действия над персонажем (обработка действий - там функция что разбирает нажатые клавиши, только по логике нав ход должны подаваться не клавиши а константы, определяющие действие, вывод на экран - вернет символ, проверку проходимости точки на карте, т.е. стены, и т.п.) тогда будет проще добавить к примеру второго игрока или NPC и т.п.
    Ответ написан
    4 комментария
  • Как задать размерность массива при помощи константы?

    @rPman
    ты свой массив может создать нужного размера уже в процессе выполнения а не на этапе компиляции, тогда размер может быть в переменной
    int *a=new int[size];
    int *a это определение массива без инициализации, размер компилятору массива неизвестный, а саму инициализацию проводить оператор new а значит где то в конце нужно память освободить с помощью delete

    upd. это было для c++
    ну а для си получается надо пользоваться malloc и free соответственно
    int *a=(int*)malloc(size*sizeof(int));
    Ответ написан
  • Где скачать компилятор для си?

    @rPman
    Кажется любой компилятор c++ (тулкит) таскает с собой по стандарту поддержку чистого C (если что он так же развивается параллельно C++)

    Уж точно gcc - да

    Где и как скачать зависит от операционной системы
    Ответ написан
  • Можно ли реализовать графику на стандратных и системных библиотеках?

    @rPman
    если windows.h стандартная, то почему бы не использовать такими же 'стандартными' directx/opengl/vulkan/...?

    и если что у windows есть ее штатная win32api gdi, как минимум спрайты выводить получится и стандартные линии точки элипсы или заливка по шаблону... в общем можно
    Ответ написан
    1 комментарий
  • Почему функция выводит нули?

    @rPman
    nummas[i] = a[i];
    тут ты в буфер nummas складываешь найденную цифру не с начала строки, а с позиции i которая для нее уже в середине, а так как изначальна строка нулями заполняется, atoi думает что строка пустая и возворащает 0
    ты должен завести еще переменную для номера символа в nummas и не забудь перез atoi добавить в еще символ с кодом 0 чтобы затереть предыдущее значение (иначе если сначала найдешь длинное число а потом короткое, при выводе котороткое смешается с длинным)

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

    @rPman
    Потому что строки так не сравнивают, == сравнит только указатели (что смешно, если сравнивать константы, то компилятор их соптимизирует и указатели станут равны, т.е. константы так сравнить получится)

    Совет, включи в настройках компилятора проекта показ ВСЕХ варнингов, ключ компилятора /Wall (вторую опцию не обязательно хотя подход полезный)
    spoiler
    4fktybmw4dhmwr8oiyimvddthli.png

    тогда компилятор на твои if-ы ругнется и ты о проблеме узнаешь заранее
    Ответ написан
  • На какой библиотеке или фреймворке C можно написать ПО для автопилота самолёта?

    @rPman
    посмотри на чем пишут софт для всяких квадрокоптеров 'умельцы'
    https://github.com/ArduPilot/ardupilot

    конкретно в этом проекте сборная солянка из c++, c, objective-c, python и lua
    Ответ написан
    Комментировать
  • Возможно ли создать независимый процесс по закрытию основной программы?

    @rPman
    В си решение будет зависеть от выбора платформы, под которую разрабатываешь, для win32 gui вполне возможно что тебе хватит отлавливать закрытие окна на событии WM_CLOSE в твоем главном цикле обработки событий окна, а для posix это регистрация колбек с помощью signal на тип события SIGTERM (там можно и на другие события повеситься, даже к примеру на принудительное завершение ядром процесса по исчерпанию лимита оперативной памяти)...

    Первая же ссылка в гугле по запросу: c++ exit current process callback, направление поиска указано в вопросе. Не все виды завершения работы процесса могут быть отловлены самим процессом, в частности у вопрошающего проблема с консольным приложением в windows... возможно если порыть msdn можно будет найти еще какое решение.
    Ответ написан
  • Можно ли сделать демона из программы, которая читает файл?

    @rPman
    Любая программа может являться демоном, если ее настроить на автоматический запуск и если ее работа будет фоновой, скрытой от пользователя.

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

    Способ настройки отличается для каждой версии linux, например для ubuntu сейчас это systemd, первый же пример из гугла.
    Ответ написан
    Комментировать
  • Где найти стандартные библиотеки Си?

    @rPman
    Очевидно компилятор не знает где находятся эти файлы, это прописывают либо в переменных окружения (INCLUDE или LIB через ';' если путей много) или в настройках проекта (в файлах управления сборкой, например makefile)

    Все зависит от того что за компилятор вы выбрали, mingw, cygwin, llvm clang или средства сборки microsoft visual studio?
    Ответ написан
    Комментировать
  • В чем разница между указателями в си?

    @rPman
    Есть еще символ & который позволяет описывать переменные, доступ к которым синтаксически ничем не отличается от прямого доступа но по факту это ссылка:
    class MyClass
    {
    public int value;
    MyClass(int _value):value(_value){}
    }
    
    MyClass *tmp=new MyClass(10);
    MyClass &object=*tmp;
    object.value=20;
    delete(tmp);

    99% различий кроются в способах инициализации (и освобождении памяти), и в последние 10 лет в c++ наплодили столько изменений именно вокруг этого.

    Причина - попытка получить больше контроля над памятью объектов, чтобы у компилятора было больше возможностей по ее освобождению.

    p.s. используйте & для определения типов параметров передаваемых в функции, чтобы происходило не копирование а передача по ссылке, и при этом синтаксически вы бы работали с объектами напрямую.
    Ответ написан
    Комментировать
  • С чего начинается написание программы запуска другого exe файла?

    @rPman
    Если разработчик программы пытается противодействовать подобному управлению, то, в зависимости изощренности разработчиков этой защиты, путь вам далекий и глубокий, в дебри написания драйверов устройств, эмулирующих клавиатуру, мышь и выцарапывание прямого доступа к экрану.

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

    Для начала определите, есть ли защита, запустите программу типа autoit.

    p.s. а разве у WoW нет легального api для модификации игры? мне кажется я что то такое слышал.
    Ответ написан
    2 комментария