Ответы пользователя по тегу C
  • Как правильно реализовать структуру данных для упаковки многомерного(кол-во измерений не известно сразу)массива в JSON / любой другой формат данных?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если размерности известны. Например 120 на 30 на 200 на 40 то такой гипер-кубик
    можно упаковать в обычный линейный массив. И он будет по длине равен 28800000 элементов.
    Таким образом любой многомерный массив укладывается в одномерный.
    Формула доступа будет достаточно простая. Почти тоже что и для матрицы.

    Тоесть задача хранения - решена.
    Ответ написан
  • Нужен ХОРОШИЙ rpc для языка Си, есть ли решения?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Посмотри еще в Apache Thrift. Это не совсем RPC. Это скорее стандарт на универсальный
    обмен информацией между разными языками и платформами. Но у него в качестве
    примеров есть клиент-сервер на сокетах.

    На нем также описан стандарт файлового формата Parquet для bigdata.

    https://thrift.apache.org/
    Ответ написан
    Комментировать
  • Реализация шифрование части исполняемого кода на Си?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Можешь зашифровать ddl-ку и после успешной расшифровки - динамически подгружать ее к коду.
    Но тут возможны нюансы с антивирусом.
    Ответ написан
    Комментировать
  • Как реализовать кроссплатформенную поддержку Unicode в аргументах командной строки в C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тебе проще всего посмотреть как эта задача уже решена в других Windows/Linux проектах.
    Я думаю что ты тут не первооткрыватель. Уже решали эту задачу миллион раз.
    Ответ написан
  • Может ли язык Си работать на условной stack-based машине?

    mayton2019
    @mayton2019
    Bigdata Engineer
    на условной stack-based машине


    С точки зрения практических стековых машин. Существует язык стек-ориентированный Forth и на нем программируют микроконтроллеры и вообще творят всякие штуки которые можно описать алгоритмом. Гитхабе я находил проекты реализаций языка Lisp на Forth. Тоесть ... скорее всего можно все.

    Является ли Форт в данном вопросе stack-based машиной - я не знаю. Он - скорее всего шире чем просто
    стек машина. По крайней мере есть ссылки на память и стек возвратов.

    Для прояснения - желательно чтобы автор привел свое понимание термина. Потому что есть еще
    push down automata, это тоже термин и его надо как-то сопоставить с тем что пишет автор
    иначе у нас будет оооочень много стековых машин с разными свойствами и мы запутаемся.
    Ответ написан
  • Что стоит учить с или c++ или c#?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Добрый вечер! Столкнулся с такой проблемой: Мне очень нравятся семейство языков Си, у меня есть выбор учить C++ либо C#, хочу разрабатывать ПО для ПК. Подумал начать с C++ и говорят что сначала поучить чистый СИ, а после переходить на C++, так что же из этого правильно? Надо ли учить Си? Или может лучше начать с C#, а дальше уже выучу C++?

    Тема сравнения С/C++/C# в публичном пространстве - опасная тема. Она обычно заканчивается
    топиком в 1000 страниц и великой войной всех против всех. Я видел много таких войн.
    Они ничем не заканчиваются. Специалисты остаются при своих мнениях. А зритель просто развлекается.

    Сам по себе выбор языка ставят только новички. Професиионалу безразличен язык (почти). Его может больше интересует отрасль, стек технологий, стандарты и протоколы. С моей точки зрения сегодня
    таким стандартом может быть выбор облака (AWS, Azure, GCP).

    Чистый СИ учить смысла нет. Учи сразу С++. Но даже его создатель Бьорн Страуструп считает что С++ это
    сложный язык и он настаивает чтобы новички не брались учить все фичи сразу. Исключение по языку
    СИ может быть в том случае, если ты собрался быть инженером по разработке микро-контроллеров
    и у тебя скорее всего будет только СИ как основной (на 80-90%) инструмент взаимодействия с таким железом. Выйти на мидловый или синьорный уровень в С++ очень тяжело. Тяжелее чем в других языках.
    Поэтому будь готов терпеть. Вот когда виски станут седые - тогда и будешь господин-синьор.

    C# - это очень сильно корпоративный стандарт от Microsoft. Никакой связи с С++ он не имеет. Он конечно
    внешне похож но это сходство обманчиво. Да изучать его тоже можно. Он учится легко. Существуют книги
    вроде ".... C# за 14 дней". Разработка бизнес-приложений на шарпах идет гораздо быстрее чем на С++
    например. И завалить систему в синий экран в этом языке гораздо труднее. В нем реализованы методы
    защиты памяти и нельзя грязно трюкачить с указателями как это любят в С или С++. Производительность
    шарпов в численных методах будет слабее чем в С++ но обычно бизнес не ставит таких задач и чаще
    надо будет писать веб-хендлеры или хендлеры MQ-систем. Кач уровней синьорити идет быстрее в шарпах.
    Ответ написан
    2 комментария
  • Почему программа прерывает свою работу на C?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Возможно scanf при попытки считывать 1 character читает предыдущий enter.

    Попробуй рецепт который пишут тут https://stackoverflow.com/questions/13542055/how-t...
    Ответ написан
    1 комментарий
  • Почему после ассемблера учить Си легче?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть две трудности с которыми сталкиваются студенты изучая С. Это адресная арифметика и работа со строками.
    Эти две темы зайдут легко если вы до этого уже знали Ассемблер.

    Но мне в общем кажется странным такая хронология изучения. Какой ВУЗ такое дает? Если вы до этого
    случайно знали Ассемблер - то это удивительный и исключительный факт. Насколько я знаю даже
    безопасники и системотехники не очень изучают asm. Я-бы сказал факультативно.
    Ответ написан
    Комментировать
  • Нужно ли писать суффиксы литералов?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во всех случаях мы описали тип слева. Тоесть задача типизации - выполнена.
    float a = 1.0f;
    unsigned int a = 10u;

    Я думаю что ничего дополнительно указывать не надо. В противном случае у code-reviewer
    это вызывает удивление и очередной WTF. Тоесть вам придется объяснять своему коллеге
    ДЛЯ ЧЕГО вы ввели в исходные код дополнительную информацию.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вот тут как-то странно написано.
    if(m == 'd') racket.x + 1;
    if(m == 'a') racket.x - 1;


    Если хочешь чтоб результат сохранился то надо или инкремент написать или выражение с присваиванием
    racket.x = racket.x + 1;
    Ответ написан
    2 комментария
  • Можно ли запустить программу на языке C в операционной системе FreeDOS или MSDOS?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Я думаю можно. Поищи такие компилляторы как Watcom C, Borland C.
    Они умеют генерить код для DOS. На ваткоме кажется была написана
    игра Doom for DOS.

    UPD +Линка www.openwatcom.org
    Ответ написан
    Комментировать
  • Как управлять значением пикселей на экране в виндовс?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Во времена DOS это работало да. Ты мог писать напрямую в банки видеопамяти старых карточек типа VGA/SVGA.
    Примеры кода для C++ можно найти в книжке Шикина и Борескова по графике. Но я не советую потому что
    не актуально. И современный стек графики чуть длиннее.

    Знание того как работает OpenGL и DirectX - скорее всего тебе не даст полной картины как работает железо.
    Потому что железо NVidia и железо Radeon скорее всего будет сильно отличаться. Как будут обобщены отличия - чорт его знает. Скорее всего через драйвер. Но если ты очень хочешь поработать с пикселами отдельно и быстро
    по посмотри в SDL. Я кстати тоже туда хотел посмотреть на днях. Мне чего-то захотелось температурную
    карту IPv4 адресов нарисовать. Я такую видел образца 2009 года. А тут захотел свою.
    Ответ написан
    5 комментариев
  • Как решить задачу на c?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Задача похожа на knapsack problem. Ее можно переформулировать как укладка вещей в рюкзаке с полным заполнением и с сохранением порядка вещей. Или еще как поиск всех сумм целых чисел 1,2,3 равных в сумме n.

    Если представить тернарное дерево где childs - это соотвественно длины прыжков (веса) - тогда задача сводится к генерации всех возможных путей в тернарном дереве где длина пути равна n. У этого дерева будет много лишних ветвей которые можно сразу отбросить на этапе обхода если частичная сумма уже больше чем n.

    Вобщем DFS.
    Ответ написан
    Комментировать
  • Как понять какой стандарт Си используется в проекте?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В исходниках может не быть никакого явного указания стандарта. Можно попробовать собирать проект начиная с самых старых версий и вести учет ошибок. Вот как ошибки уйдут - так и стандарт соотвествует.
    Ответ написан
    Комментировать
  • Как можно передать структуру в printf, а к переменным её обращаться из шаблона?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данная задача решается мета-программированием. Это предполагает 2 фазы компилляции. Поскольку
    речь идет о языке С. У нас нет рефлексии и нет шаблонов. То я вижу только такой выход.

    Вобщем 2 фазы. В первой фазе - объявить структуру TS1 в каком-то обобщенном формате.
    Например в JSON.
    {
      "struct" : {
        "name" : "TS1",
        "fields" : [
          { "name" : "a", "type" : "int" },
          { "name" : "b", "type" : "int" }
        ]
      }
    }


    И сгенерировать из этой структуры код для декларации ее в языке C и для форматной
    печати через printf.
    Ответ написан
    Комментировать
  • Как в языке СИ проверить существует ли файл без создания нового?

    mayton2019
    @mayton2019
    Bigdata Engineer
    FILE *handle = fopen("filename", "r")
    возвращает файловый указатель. Если открываешь на чтение - то он обычно null если файла
    не было или была какая-то другая ошибка. Детали по ошибке выдает другой системный вызов errno, streeror или
    что там еще есть другое не помню точно.
    Ответ написан
    Комментировать
  • Как создать массив из типов данных в си?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Для того чтобы это работало в духе ООП, все типы должны иметь базовый тип.

    Для функциональщины - нужно иметь абстрактный тип Any и коллекции типов которые - суть
    подтипы Any. И функцию с pattern matching которая просто кастомизирует size() и прочие
    функции. Короче почти ручная работа.

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

    mayton2019
    @mayton2019
    Bigdata Engineer
    Такое связывание специфично для Java-фреймворков а не для языка С.

    Я-бы предложил обсудить вопросы безопасности. Что будет если пользователь вызовет функцию которую ему нельзя вызывать? Как мы вообще ограничиваем пользователя? Стоит-ли такая гибкость получаемого удобства? Может лучше пойти классическим путем? Перечислить все возможные варианты действий явно и в switch-case обработать?
    Ответ написан
    Комментировать
  • На чем можно создать оффлайн базу знаний со встроенным редактором?

    mayton2019
    @mayton2019
    Bigdata Engineer
    По топику не сильно понятно что-же на самом деле хочет делать автор. Движок или саму базу?

    У баз знаний есть одна особенность. Они обычно понятны только их создателю. Тоесть если вы хотите обобщенного решения - то берите mediawiki. Всем подходит. Но опции поиска будут - наподобие текстовых. Если какое-то очень узкое кастомное решение - то это какой-нибудь семантическйи веб (XML/RDF) но пользоваться этим и искать информацию сможет только их создатель. Зато можете искать информацию очень узко. Например "все друзья у которых есть вконтакте друг который входит в группу и т.д".

    Я вот тоже пытался делать умные базы но в конечном счете все закончилось банальным языком разметки наподобие github markup language и текстовыми файлами.
    Ответ написан
    Комментировать
  • Как сделать обработчик коллизий в OpenGL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Это сложная тема. Это вам - не арканоид написать. Чтоб правильно сталкивать объекты - надо представить как-бы они сталкивались в реальном мире. И я думаю что тут даже десятка параметров недостаточно чтобы описать какое это столкновение. Столкнуть два бильярдных шарика - это одно. А два мешка с песком - это другое. Или шарик с мешком.
    Ответ написан
    1 комментарий