24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному /clang/
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002) Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994) "Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации. Прошлый: >>2495049 (OP)
>>2599892 Привет, да, интересно. Вообще мне много не надо расписывать, я люблю сам вещи изучать, мне больше нужен старт. Во-первых как и спрашиал что по физике, во-вторых с каких лучше начать. В интернете посмотрел, нашел там AVR 8 битную, думаю с неё начать, но даже если и закажу её(кстати пока не смотрел ещё где и что заказывать), то не понимаю что с этим приборчиком делать, как я понимаю его надо подключить к чему-то, а к чему? вот эти вопросы меня и интересуют для старта. Заранее спасибо!
>>2600104 это говнокод какой-то, лол. Я уверен в мисре есть о таком слово, вы вообще в курсе что этот цикл неправильный, он не выводит 10. Инкремент/декремент всегда должен быть в конце итерации
>>2599932 >что за стрелки там в коде? Это серьезный вопрос, а не троллинг? Конечно, из-за лигатур не сильно понятно, но имхо это обычное "->" при обращение к полю структуры через указатель.
>>2599892 подскажи как перехватить сигналы из кан шины - чтобы сделать хардверный макрос переключения режимов
правильно ли я понимаю что достаточно нажать нужный режим и записать сигнал, той же урдиной, а дальше просто воспроизводить и без головняка она все подцепит?
и вдогонку нужно написать опенсурц ECU, вдогонку контролить 6-axis imu && abs
Что такое модель памяти в языке программирования? Иногда вижу как говорят: "вооооот тут такая модель памяти просто". Она же везде блять одинаковая в компилируемых языках, или я чего-то не понимаю?
>>2600756 вдуше ничаю, какое то говно с алика, все вместе вышло около 25к₽ (сколько сама платка не помню)
а когда я узнал что эта паскудная параша не может в юникод, и весь мир жрет говно и костыляет юник через анси дрисню - мое срачло просто улетело на самый край галактики....
>>2600717 Что за условие в case такое с троеточием? Которое ast_amp ... er_eri: Вообще смотрю иногда чей-то код и вообще не могу понять что там написано, хотя вроде Прату вроде осилил. Как учиться читать и понимать чужой код? Причем есть вещи, с которыми был не знаком, но там интуитивно все понятно. Встречался с таким когда вкатывался в FreeRTOS, там весь код хорошо понятен был.
>error: expected identifier or '(' before '=' token >error: 'st' undeclared (first use in this function) >error: 'ed' undeclared (first use in this function) начинает пригорать потихоньку
если два кейса переставить местами тоже перестает работать
хотя казалось бы ему должно быть похуй на первый айтем энума..
>>2599695 (OP) Хочу запилить имплементацию сетевого протокола RTSP и RTP чтобы смотреть картинку со своей камеры как хочу и не платить охуевшим комерсам знаю что плееры умеют в ртсп, но хочу сам и чтобы дальше кодирование в hls было, про модуль для нджинкса тоже знаю Стоит ли выбрать для этого си, или сложно для типикал формошлепа будет? И что вообще можно почитать про работу с сетью/сокетами/tcp/udp? Не книгу же Танненбаума на миллион страниц читать
Сначала небольшое вступление про образование При поиске работы в области встраиваемых систем необходима вышка или спецуха по направлению радиотехника/робототехника/и т.п. Возможно кого-то и брали без диплома, но весь мой опыт показывает что берут только с ним. Так происходит, потому что при работе с железом никто не хочет кота в мешке. ->Во первых, часто приходится работать с напряжением, в том числе и высоким, с системами, которые опасны для жизни. На учебе объясняют чем опасно высокое напряжение, СВЧ и т.д.
->Во вторых, при обучению ты знакомишься со всем по немногу и сможешь сразу говорить на одном языке с другими инженерами. Да, физика, матан нужны. Придется и фильтры писать, и расчеты иногда делать, и в целом понимать как физически устроен мир и различные приборы. Так же надо уметь хоть как-то читать схемы, но на это часто закрывают глаза.
Если учиться хорошо, и не пить пивко, то можно уже курса с третьего получать 1к+ долларов работаю прогером или схемотом. но обычно все учатся без интереса, и только через пару лет работы понимают что упустили кучу прибыльных знаний.
Без холливаров про вузы в постссср, но базе везде обучат, а это главное. Современные мк можешь и сам потрогать.
Если без вуза, то вопрос по самообучению. Сам я после выпуска не умел кодить на Си под мк, но по совету научника взял отладочную плату, и по видеокурсу с кафедры разобрался с основами. Дальше учился сам и подсматривал у коллег.
С чего же начинать самообучение. Как всегда ответить себе на главный вопрос: А зачем мне этот навык. ->Если для поиска работы, то идем в вуз. Может заграницей берут без диплома, не знаю. Надо уточнять. ->Если для себя, то встает вопрос как учиться.
Для простоты поделим умение программировать МК на три области: 1. Знание С/C++, компиляторов, IDE и т.д. 2. Понимание архитектур МК, рынок производителей, различных протоколов CAN, UART, I2C, SPI и т.д. 3. Матан, схемотехника, физика.
1. Сам язык Си простой, и не надо верить что он сложный, легко прострелить колено, это как клюква про матрешку, водку и медведя. Берем книгу Керниган и Ричи, и всю ее с примерами проходим. Простая книга, простые примеры. Примеры печатаем сами руками, чтобы лучше запоминалось. IDE можно взять Code Blocks с предустановленным mingwб чтобы сразу компилировать проекты по винду. Под Линуксом есть компилятор cc,там можно и руками собрать. Чтобы писать примерно 90% кода под МК достаточно этой книги. Уж поверьте. Большинство программистов в первую очередь инженеры, и пишут на троечку с минусом. Если быть упорным, то через пару лет можно писать код лучше чем большинство коллег. Ну пару недель читаем учебник, делаем примеры. Если что-то не идет, то возвращаемся через неделю.
2. Без холливаров про ардуино и STM, покупаем отладочные платы как под ардуинку, и ставим arduino IDE. И сразу же покупаем отладочную плату с STM и ставим STM32CubeIDE и keil uvision IDE. Покупаем пару датчиков: например температуры и дальномер, любые. Покупаем паяльник дешевый, припой и т.д. По схемам из интернета собираем сначала на ардуино оба датчика и отправляем полученные данные на компьютер по uart. Так же поступаем и с платой STM. Уйдет на это пару тройку неделю и вуаля, вы уже сами можете сравнить не на словах, а на деле, что для вас лучше, ардуино или STM.
3. Со схемотехникой вы столкнетесь как только придется подключать датчики, в сети есть простые схемы подключения типовых датчиков, с сайтов, которые торгуют ими вместе с ардуино и stm. С физикой столкнетесь, если будите использовать ультразвуковой датчик расстояния. С матаном столкнетесь, как только придется написать первые фильтры, на полученные данные с датчика температуры и расстояния.
Поздравляю, после этих трех шагов вы можете сказать себе, а хочу я и дальше этим заниматься.
Если да, то можно заняться либо домашней автоматизаций, типа грядок и ферм с цветами, или строить радиоуправляемые модели самолетов. Если нет, то вы получили интересные знания, и когда мошенники придут перепрограммировать вам счетчики воды, вы будете знать что в старых счетчиках нет МК, и сможете их тонко потроллить.
А вообще проще все это объяснять в телеге и отвечать на конкретные вопросы.
все комплёхается и корректно работает, но организация низушная, всратая, нихуя неудобная, невозможно сделать красиво
поэтому вытащу это дерьмо в хедер, и напишу ЕБАННЫЙ ФРОНТЕНД где бы я все хранил, отрисовывал и генерил конфиги сразу в буфер обмена
но на самом деле мне только сейчас пришла мега идея - просто нахуй забить хуй на это уебищное дефолтное дерьмище, просто Шифт это ебучий костыль для нищебродов и калоедов (запятая в верхнем регистре - охуенна да?))))
и просто создать кастомный слой, где бы я все обернул в модификаторы!
>>2601509 > но обычно все учатся без интереса, и только через пару лет работы понимают что упустили кучу прибыльных знаний потому что все вокруг безинициативные престарелые пидарасы, которые трахают тебя юзлес дрисней, нахуй не нужной, которую ты забудешь через два года
я датасаентист и мне нахуй ни какая матёшка не всралась кроме умножения матриц (достаточно просто загуглить гугл-картинки) а вам и подавно это все не уперлось
учится надо только в работе - вот где кайф и реальный интерес
> видеокурсу с кафедры нудный пидирас бурчит чето полтора часа - открываешь АНГЛИЙСКИЙ тубик и смотришь охуенного челика который на бодряках с задором и смехуечками в охуенной студии со спец эффектами тебе поясняет за всю хуйню за 12 минут
все твои задачи типовые, все давно придумали за тебя и даже я, занимаясь уникальной разработкой, находил кусочки которые мне в разной степени помогали строить аналоговнетную систему
>>2601521 >самостоятельно пошел получать образование >ряяя скучно, где эффекты и терминатор вылезающий из стены? >почему моему зумерскому мозгу не предоставили клоуна?
>>2601549 Да-да, это же я дурачок с СДВГ, которому нужен скачущий негр, чтобы его величество соизволило учиться. >я привык брать только самое лучшее Поэтому ты смотришь говновидосы на ютубе, а не читаешь книги. А в книгах же спецэффектов нет...
> а не читаешь книги потому что это НННАХУЙ невсравшийся дрочь
я вот обсудил с нейросеточкой какие же инамы хуета, и пошел ебашить дальше, мне допизды на арифметику указателей, я её не трогаю, потому что она не решает мою задачу, это будет просто мусорные знания, которые отнимают мой нейросетевой пул
но тебе же надо перед барином выслужиться, барин каргокультный кусок дерьма пынямает только корочки и лычки, а по факту ты как ебашил за два мрота свое говно пыльное и убогое, так и продолжаешь это делать без изменений...
В общем история такая. Есть проект Си, на который я внезапно попал да и тем более x86-x64, на котором вообще в продакшене не прогал, был до это этого байтоебом, дрочил-дрочил себе всякие MCU и горя не знал, думал оптимизация это не более чем DMA и IRQ, и аппаратные поддержки того-сего, которые сами делают магию. Но не тут-то было и настало время делать невротебенные оптимизации и тем более разбираться в них.
Почитал про всякие SSE, AVX2, AVX512, вроде как понятно, но как их юзать вообще не ебу. Анонче, посоветуй, пожалуйста, нормальных книг по оптимизации и использовании всяких расширений проца. Ну, там книжки, маны, которые знаешь, с которых начать. Как, собственно пользоваться всеми прелестями современных процессоров и использовать эти длинные инструкции, для оптимизации программ? Как например, вогнать данные принудительно в кеш, например, и там перемолотить словами по используя шины 256-бит?
>>2603212 Ладно, думаю стоит ли вообще изучить ассемблер x86 от и до. А потом уже разговаривать. Я так собственно микроконтроллеры учил, начал с ассемблера, за 2 месяца освоил азы, потом понял куда двигаться. Начну с пикрил. Там посмотрим.
>>2603322 Чел учение и знание это конечно хорошо, но особого смысла нету. Если только не ради науки, и я не про практическую реализацию чего то научного, а про сугубо прогоамистские изыскания. Я сравнивал скорость нескольких популярных математических библиотек, некоторые из них с ключами собираются с ссе или авх, а некоторые исключительно под авх и написаны, а так же свою простую скалярную. Так вот с о0 разница действительно есть, те что фул авх быстрее гебридов, а те быстрее скаляров. Но если собирать в релиз с арчнатив и о3, то все. Современные компиляторы и процы такие крутые что все, практически никакой разницы.
>>2603564 Я не он, а всего лишь около годовалый вкатышь, но тоже перкатываюсь на линупс с микроконтроллеров. Вкатился почти год назад в микрокамни, пока оформлялся началась заваруха с сво. В итоге вкатился в микроконтроллеры, даже кой чего уже написал, а в итоге к концу лета совсем все поставки оборвали. Теперь в суматохе переходим в эмбедед линукс и соответствующую комплектуху.
>>2603564 Я - он. Вообще, когда я работал в эмбедде, мне помогли широкого круга задачи на разных проектах, это SIO, эмбеддед Линукс АРМ (сборка ядра, дергание ануса драйверов) IoT, чипсеты, биосы, со всем работал по чуть чуть, так что появился кругозор. Потом понял, что просто вырос и надо двигаться.
Если серъезно рассматривать, та работа на которой сейчас это самый крутой проект на котором я был. Также помог вкатиться опыт админа, внезапно. Понимание сетей и виртуализации.
Да, компания занимается и сетью, ОС и куча эмбеддеда, крупная компания по разработке всякого железа. Сейчас проект как раз - оптимизация алгоритмов и допил KVM и сетевых штук (DPDK, IOMMU, SDN)
>>2603845 >крупная компания Каждый разработчик этой компании бегает на двач с вопросами "как и что делать?" или ты один такой уникальный ширококругозорный растишка?
>>2603898 Нет конечно, была небольшая база до этого, просто в серьезных проектах никогда не учавствовал. Да и не писал я, что все за год освоил. Только вкатился же.
>>2603878 Во первых я не спрашивал что делать, я спросил литературу, не каждый день тебе ставят задачу по AVX. И не знать это нормально. Ненормально ходить вокруг да около годами и не пытаться узнать или спросить. А во вторых каждый разработчик ходит ещё и на StackOwf, LOR, а ещё ходит на дейлики и рассказывает проблему там, в которой ему, незнающему как делать, подсказывают.
>>2603584 > В итоге вкатился в микроконтроллеры, даже кой чего уже написал, а в итоге к концу лета совсем все поставки оборвали. Так программирувай отечественные mik51 и миландры. > Теперь в суматохе переходим в эмбедед линукс и соответствующую комплектуху. Китайские клоны π?
>>2604306 Лол, я на миландры и вкатился. Но они ушли с рынка. Сейчас ждем ответа от другой фирмы. Ну и да, юзаем "отечественные" клоны малинок, если это так можно назвать, хотя малинки не были первыми.
>>2603845 Платят хоть нормально? А то я много лет занимаюсь байтоёбством в госконторе за копейки, думаю развиваться в этой области и попробовать найти работу с нормальной ЗП, либо попытаться перейти в бэкенд.
>>2604608 >>2605046 Платят нормально, ДЦ. Хотите к нам - пишите, команда пока набирается, так что и стартануть будет проще. Скидывайте резюме или профили LinkedIn, что у вас есть.
Эта книга прям для совсем начинающих ассемблерщиков. Но в ней чел хорошо также раскрывает авх инструкции и действие в основном происходит в убунту 18.04 (только, чтобы gdb заработал должным образом в 20/22.04 нужно ручками пересобрать glibc) и он подходит к объяснению некоторых фишек ассемблера с помощью Си, а Круссвюрм с помощью плюсов и кодит в винде, но и раскрывает Круссвюрм авх, авх2, авх512. Так что, да, разница в этих книгах есть, поэтому, если совсем плох в ассемблере, то можно (и я бы сказал нужно) Ван Гуя почитать.
>>2605653 Спасибо за разъяснения. Ну, ассемблер-то, естественно понимаю, а на слабых 8бит архитектурах вообще чаще с ним работал. Но сейчас каждневного использования нет, естественно. Ну и понимание, конечно в большей степени это RISC или близкие к ней. Так что что посмотрю обе, в них вещи и там и там есть которые не знаю. Книги хорошие, это да, но как я понял про asm их вообще мало.
>>2605612 Негатива не делаю. Ну разве что могу попросить прийти на Петровско-Разумовскую и принести с собой самый длинный AVX.
>>2605672 >но как я понял про asm их вообще мало asm нынче не в моде, потому и книги по нему хорошо не продашь. Страшно подумать что будет, когда челы допилят гпт и копилот, потому что тогда вообще никакие книги не нужны будут. Это с одной стороны, но с другой стороны, если это будет век невероятного макакинга, то и багов будет в этом коде уйма, следовательно, если обладаешь навыками кодинга на ассемблере, плюс обладаешь навыками дизассемблирования, то в эпоху бесконечного макакинга можно иметь конкурентное преимущество. Так что сейчас нужно впитывать как губка всё, что связано с asm и дизассемблированием.
>>2605731 Так если всё больше и больше макак будут доверять прокодить часть своей работы недоработанному боту, то и кол-во багов в коде должно расти пропорционально. Так что, вот тебе и конкурентное преимущество.
>>2605735 ну так ты можешь и макакить как и раньше, у тебя уже будет преимущество, нейроночки тебе только будут быстрее подсказки выдавать, чем stackoverflow или когда что подзабыл, кодить все равно пока даже такое банальное человеку эффективнее
>>2605751 Короче, ты дебс, который нихуя не шарит в дизассемблировании и ревёрс-инжиринге, а потому и не понимаешь в чём именно сейчас преимущество у чела, который хорошо шарит в ассемблере и дизассемблировании; а потому и диалог с тобой я прекращаю уёбок, блять!!!!!
>>2606060 >эвристическому подходу Да причём тут это? Ты сетке говоришь: "Я хочу, чтобы мой алгоритм выполнял то и то.", а она и пишет для этой задачи код. Любая программа состоит из большого числа таких вот элементарных подпрограмм, которые за тебя пишет сетка, а ты потом всё это компилишь. Т.е. от будущей макаки требуется только разбить задачу на мелкие подзадачи, а после того, как сетка напишет каждую подзадачу, задача макаки переводится в сбор всех этих подзадач в единое целое.
Вот и представь какое это непаханое поле для дизассемблирования и ревёрс-инижиниринга.
>>2606088 > Я хочу, чтобы мой алгоритм выполнял то и то.", а она и пишет для этой задачи код. там такое говно неоптимизированное будет, даже если будет работать правильно, что разгребать это все придется тоже долго или деньги вбрасывать для увеличения накладных ресурсов для поддержания такого бизнеса, что одно и то же, поэтому - пока это только отдаленное светлое будущее
>>2606106 Та что за прямолинейное мышление то, блять? Наоборот же!!! Сейчас у нас какая картина: говно на Мете (Еблокниге) выпускает под свою аську (ватсапп) обновы по 250-300 метров, блять: Ёбанный чатик получает обновы по 250-300 мегабайт, блять!!!!!!!! Их ебейшее говно под названием инстасрам, блять, нагружает сеть на 1,5-2 секунды на, блять, 25-50 Мбит/сек, когда ты перелистывешь в их приложухе один пост: БЛЯТЬ, ты в их ебанной приложухе, сука, перелистываешься с одного поста на следующий, и у тебя в этот момент, блять, нагрузка на сеть в 25-50 Мбит/сек в течении полутора-двух секунд, сука!!!!!!! Ты не хуйнул пальцем с дури по экрану смартфона, чтобы, блять, долистаться до середины всех постов, блять, за всю историю этой ебанной соц. сети, а просто пролистнул тихо, спокойно на след. пост в твоей выдаче!!!!!!!!!!!!!Ебать, веб-макаки шо вы, блять, делаете??????????!!!!!!!!!!!!!!
Понятно, что эти дебилы считают байты в уме только в фильмах как можно быстрее хотят выложить свою приложуху, чтобы захватить часть рынка, а дальше, блять, ебануто-огромными обновами всё стараться допилить, но также обсираться, как попрёт. Вот тут-то и помогут эти нейронки, потому что, когда не будет затрачиваться время на то, чтобы дебилам веб-макакам писать код, после того, как уже на блок-схемах или, блять, в майнд-картах или ещё где-нибудь, но сука, главное, чтобы не в голове, а то голова этих дебилов разорвёртся из-за такой сложной инфы, задача разложена на мелкие подзадачи, эти самые мелкие подзадачи скармливать нейронке, а остальное время оптимизировать всё то, что она высрала. Вот тебе и "коллаборация" нейронки и ревёрс-инженера, с навыками дизассемблирования. Так что и по времени и по деньгам будет примерно всё равно, но только приложуха, с большой долей вероятности, будет уже оптимизрована и ахуенна.
>>2606120 > этот первый ответ уровня гороскопа в газете по обобщенности И че, скоро у твоих нейросеток появится интуиция? А свои собственные суждения она вообще научиться делать?
>>2606279 > Мы байтоёбы тебя заменим, сучка!! Бойся нас и нейронок!!!!!! ты смотри там от голода не умри байтоебик лол
300кнс то у меня 😉
>>2606283 > интуиция есть у меня, и просто пёхая её вопросами она реально вытаскивала меня на верный путь в казалось бы безвыходной ситуации (дико всратая апишка которую я не имел ни возможности ни времени дебажить)
> свои собственные суждения она пусть запихает себе в электронное очко
>>2606314 >300кнс то у меня Чел, просто ты не понимаешь куда всё движется, потому что ты что-то бОльшее, чем мат. анализ и теор. вера, чтобы обучать свои нейроночки, не изучал. Чел, мне тебя искренне жаль, потому что ты сейчас со своим замыленным взгладом от того, что у тебя всё получается, роешь себе же могилу, обучая нейроночки. Я уже вижу твою голодную смерть, через 3-4 года.
>>2606346 > мат. анализ и теор. вера нахуй не нужны, это все форс для додиков-даунов и тупорылых скотопидорашьих кабанов, которые не могут отличить DS от CS
> Я уже вижу твою голодную смерть, через 3-4 года. додик у меня жизненный путь такой что ты охуеешь, я долго искал себя, зарабатывал деньги, достигал совершенства и двигался дальше, датасаенс (графон, а не статка ссаная) идеально ложится на мою био-нейросеть и я бы не хотел никем другим работать, но это не значит что я забыл свои прошлые скилзы (проф студийная фотография, традиционный и сж арт, поли и солид сриде моделенг, процедурная генерация, геймдев в еуче, теч арт)
плюс у меня два велосипеда (электро и обычный) и мотоцикл
я занимаюсь накатом свободной прошивки на вело-моторчик и постепенно вкатываюсь в низину, чтобы вдальнейшем переключиться на мотоциклетные мозги, и сносить нахуй эту пропритарную пидарастию(и потом хочу заебашить контроллер подвески и всякую йобу типа селф драйва с хайв майндом для чиловой езды в колонне на 300кмч), а с более широким появлением электрокаров - этой пидорастии будет в разы больше просто оцени сука полет мысли и амбиции чмо
ну и плюс слесарные навыки, и умение варить тигом в инертной среде аргона
ну и совсем уж с натяжкой могу уйти в промальп, но там замкадские скотоублюдки, а в москве автовышки, так что такое
поэтому додик умрешь от голода ты, а я всегда найду чем заниматься по кайфу и рубить ловешку даже в постядерный апокалипсис.
>>2606423 >на мотоциклетные мозги, и сносить нахуй эту пропритарную пидарастию Представил новости того периода: Увеличение количества "хрустиков" в 15,6 раз власти связывают с неким программистом. Дело под свой контроль взял лично Министр Внутренних Дел.
>чем заниматься по кайфу и рубить ловешку В итоге, после новости выше, оказавшись на зоне, ты не долго думая, понимаешь как рубить ловешку, продавая свои услуги(ротешник и очелло), что не нравится главным авторитетам этой зоны, ибо петуч это бесплатные ротешник и очелло, а этот просит деньги, твоим дыркам устраивают: >ядерный апокалипсис
>>2606440 > количества "хрустиков это константа, ты просто туповатый додик нихуя не разбирающийся в вопросе
мотоцикл не прощает даунов ты был бы гарантированно уничтожен таким образом поддерживается тесная взаимосвязь внутри братства
если жив - значит достоен доверия.
ну а наматываются на столб всякие нищие шакальники, одухотворенные и тупопёздные отбросы, ебливые позеры со шкурами, ну и анскильные говнари подпивасники
таким образом планета очищается, мир становится лучше
жаль у клеточных нет подобного механизма
> на зоне кодеры это привелигированная каста, они пилят софт за еду, либо делают прозвоны и наебывают твою ебанутую бабку и мамку на бабки
>>2606451 >это константа Туповатый додик тут только ты! Собираешься запускать авто-пилотные мотоциклы, но не знаешь того, что автопилот не с неба берётся, а его обучают, а в ходе обучения могут происходить разные казусы. Казусы, которые связаны с обучением твоей нейронки, я уже описал, и это похоже на правду, потому что ты туповатый додик, который не может связать А с Б. Этот диалог окончен! Мне больше нечего донести до дегенерата (тебя).
>>2605721 Если идеализировать, что нейронка умеет самообучаться, именно делать выводы, то да, может она и сделает что то и даже кого-то заменит.
Но, т.к. работа любой программы ведётся всегда на стыке чтения схем, спецификации, документации, требований, и собственно написания кода то мне просто сложно представить как нейронка может чему-то помочь.
В эвристику, дедукцию, статистику может да. И то отдельных блоков, предварительно декомпозированной задачи, потом проверенной и дрписанной при необходимости. Но не в написание кода и даже не в замену джунов, как это говорят. А если вы считаете что написание инициализации это и есть повод замены джуна, ну это слабый повод, даже потроллить.
Я как занимавшийся электроникой могу сказать что даже симуляция железа эмуляция схем, ну это ОЧЕНЬ не точные данные. Все эти Верилоги, симуляторы электронных схем, полноплатформенные симуляторы железа, статические анализаторы кода пишутся крупными компаниями годами, а они все не могут полностью заменить реальную практику. Там можно только обкатать и сделать претест.
Это все выливается в огромные тайминги, а если ещё все это между собой соединить и подключить к нейросети это просто будет код живущий в своем манямирке, не более. Который после выхода из манямирке придется просто переписать, а не подправить delay_ns().
Ну, мой вывод такой: на данный момент замена ограничена не более чем отсутствием реального мыслительного процесса. Имитация мышления это не мышление. Машина не может сделать анализ больший чем написан в документе или написанный в коде. Это так себе затея. Тогда все программисты превратятся в техпичав по сути. А зачем тогда? Сидеть писать тонны бумаг, чтобы превращать из в код? Тогда и второй вопрос встаёт - рентабельность бесконечной декомпозиции задач.
>>2606489 Ясно! Школьник-фантазёр перед нами. Пока есть такая возможность, то учи математику и физику, особенно налегай на олимпиадные задачки по физике, потому что они хорошо развивают как логику, так и математический аппарат. И поменьше трать времени на двач, потому что это помойка. И не прерикайся с мамкой. Понял, школота???! А то приеду и ремня тебе всыплю!!!
>>2606466 Чел, это всё, если не учитывать то, что нейронки не будут дальше развиваться.
Не понимаю, почему ты так прицепился к декомпозиции задачи? Разве это не является нормальным решением любой мало-мальски сложной задачи? Конечно, тут можно пофантазировать, допустим, отталкиваясь от того, что а для чего программа разбивается на на подпрограммы? Разбивается она для того, чтобы этот код можно было читать людям. А, если весь код будут писать нейронки, то зачем тогда вообще декомпозитить программу? Получил пласт кода и норм. Правда, как это оптимизировать - хз? Но и тут можно придумать что-нибудь, исходя из соображения, что на уровне машинных команд, по сути все программы, допустим Word, Openoffice writer, Гугл док, etc, выглядят одинаково. Потому можно обучить нейронку, как бы мыслить паттернами, ну и оптимизировать эти её паттерны.
>>2606535 >Не понимаю, почему ты так прицепился к декомпозиции задачи? Разве это не является нормальным решением любой мало-мальски сложной задачи? Да ты прав, любую задачу нужно декомпозировать. Но, я не просто так написал про мышление. В жизни ты можешь вертеть декомпозицию как хочешь, если ты пишешь задачу человеку даже так (только без предирок, мы ж про абстрактную задачу): "Посмотри документацию, там не соответствует действительности решение: галка "запомнить" при входе стоять не должна, поэтому у тебя автологин" в принципе все. Ты поверхностно описал техзадание, на один кейс. Сплочённая команда, где люди работают более полугода они варятся в задаче и поймут про что и как идёт речь. Им не надо рассумоливать. В случае с компьютером, ты ему должен объяснить досконально что надо, о чём идёт речь, какое место в доке, про что ты точно говоришь и номер главы и пункта документа. Иначе тебе компьютер сделает чтобы ГАЛКА НЕ СТОЯЛА,а логику не поменяет. Другими словами ты будешь писать человеческими словами программный код. Только мнемоника поменялась.
Далее, я говорил про рентабельность. Например, при появлении мультиплексора исчезла такая профессия как переключатель телефонной линии.
А вот при изобритении конвейера профессия упаковщик и мерчендайзер остались. Хотя конвейер это два моторчика, да и что стоит сделать в Ашане автоматизированные полки, которые будут подвозить товар на ленте со склада к стеллажам? И вообще товар раскладывать не надо будет, можно сделать вообще чтобы на складе был всего один оператор, который кнопки нажимает, а на лентах товары по всему магазину ездят, да?
Но это нерентабельно. Как и нерентабельно рассусоливать такие задачи компьютеру: "Нужно сделать имитацию двух катушек индуктивности, и посмотреть на каком расстоянии они вместе увеличивают индуктивность, а при каком расстоянии они ее уменьшают, потом сымитуруй установку в вращающуюся шестерню из железа и сними на основе этих данных напиши программу которая будет менять предельную частоту" - это реальная задача у нас была (называется скоростемер в автомобиле). А такую задачу даже SPICE не справится очень много внешних факторов. А теперь представь сколько нужно сымитировать вводных данных, физических свойств, погрешностей, и прочего. Вот тут легче взять паяльник и за пять минут спаять, поднести к шестерне и мультиметром тыкнуть. Вот задача на стыке требований и кода. Тут кода не будет пока не удовлетворяет все требования.
Таких задач масса. Даже схемы элементарно читать.
Анон, я не хочу сказать что все пиздец нейронки говно и не нужно. Но круг задач очень сужается какая бы она умная не была. Ещё раз: рентабельность, глубочайшая декомпозиция, программист пишет текст а не код и является прослойкой для нейронки. Если и сейчас взглянуть на мир как в примерах выше, технологии появились, но не все заменили, но все же облегчили.
>>2606790 Жиза, большая часть разрабов мыслят о мире, только как о цифровом, потому что ни разу не физики и не инженеры. Если перейти к физике, то там люди на порядке лучше нейронок решают проблемы, которые появляются в процессе исследования и разработок.
Аноны, можете пожалуйста объяснить как работает wmemcpy... Я выделяю массив "a" в куче, потом передаю туда байты используя ReadConsoleW, выделяю массив "b" в стеке размером wcslen(a)+2, далее копирую из массива "a" набор байтов меньше на 2 в массив "b" используя wmemcpy, т.е. wmemcpy(b,a, wcslen(a)-2), НО происходит ошибка, gdb показывает что в массиве "b" хранится лишний символ "P" который я явно не передавал в консоль.
>>2607948 Я если честно не могу там разобрать что ты понаписал. Ты бы лучше скриншот памяти показал и все. Вот такие вот ребята приходят на митинг и хуярят хуй пойми что какие-то байты, биты, еще что-то там, потом переходы, возвраты. Уже голова на третьем предложении взрывается. И он там стоит 5 минут монолог читает, все молчат, а тимлид покорно кивает головой. Потом его это доебет он говорит: "Ну ты там в таску свои исследования кратко прикрепи... Давайте, кто там следующий?".
А так, если ты с клавы что-то вводил, может у тебя там нуль-терминатор.
>>2607957 Ты ток не злись на меня, мне стыдно в этом признаваться, но я глупенький пока, учусь работать с отладчиками, пока работаю с gdb, и не в курсе как правильно сделать снапшот памяти...
>>2607987 >Посмотри что в массивах до введения в них данных и после. >Может ты когда массив выделяешь он забивается мусором?
Я посмотрел, а там мусор...там ведь нули должны быть ? Я думал при объявлении массива в стеке, он автоматически нулями заполняется, а там каши.... bylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>>2607997 ну теперь знаешь, что выделение памяти, если это не специальная функция, не присваивает никакие дефолтные значения, потому что это не всегда нужно, а ресурсы отъедает, поэтому если в твоей задаче это необходимо, то просто дописываешь зануление или какими там значениями тебе нужно
двач привет, незнаю по адресу ли я, (незнаю у кого спросить) обьясните пожалуста почему getch() не работает? При вводе буквы ни одно из условий ниже не выполняется и в строке "предедущая команда" переменная Key не отображается
>>2608167 Хз, анон, на стаке пишут, что это баг в винде и кто-то советует на прямую компилить программу, либо попробуй добавить заголовочный файл stdlib.h
>>2608189 Короче, во-первых, попробуй заюзать функцию getchar, во-вторых, у тебя идёт сравнение между целым и указателем на строку, потому что функция getchar или getch получает код символа, а не сам символ. Вот пример: это выход из цикла и я изменил твой код пик2 (114 это код символа "r"). Попробуй для начала заюзать getchar, а потом дальше иди.
>>2608255 Компиль напрямую, либо поставь себе на виртуалку убунту и кодь в ней через терминал, как диды. Обычно компилятор сообщает в чём проблема, при компиляции.
>>2608141 getchar возвращает тип int с ASCII кодом символа, а текст в двойных кавычках - это указатель на строку. Т.е. ты сравниваешь int с указателем. Буква в одинарных кавычках - это как раз ASCII код символа, а не указатель на строку. Так что замени у себя в условиях двойные кавычки " на одинарные '
>>2608362 Двойные кавычки, одинарные, пять сортов каких-то скобочек, подчеркивания, табуляции. Почему нельзя сделать как у людей, и обозначать информацию общепринятыми методами a-zA-Z, а не какими-то манясимволами из глубин уникода?
>>2608097 МЛ- это датасаенс ? Я видео взял из треда "субкота", вчера пару часов просидел в том треде, насмотревшись на котов и кошек, и мне оно тоже показалось очень милым, хотя надо всё таки было другое webm выложить, чтобы не было каверзных мыслей, ибо я не люблю педофилов, но в этом треде вроде как нормальный контингент, программисты, и таких персонажей тут нет надеюсь.
> не люблю педофилов а насколько хорошо ты знаком с предметом чтобы столь категорично о нем отзываться?
для начала >=14 уже не педофилия, и даже в этой стране ты можешь завести жену этого возраста совершенно легально
а потом поразмысли над тем - насколько ребенок вырастет нисчастным и зашоренным двачером с зачморенными родителями скотопидарашками без любви и ласки
протестовать нужно против насилия (в той же шкале например) и против сука тупорылых ублюдков и неабортированных даунов (читай невежества) а от нормальных мужиков нужно просто взять и отъебаться нахуй
> программисты люди думающие, а интеллект это не краник, его не прикрутишь, он работает всегда и как вода - постоянно точит рамки дозволенного, это рост братишка, это энтропия - так устроенна вселенная!
>>2608646 Слушай все люди не идеальны. Вот ты считаешь нормальным, что например 40летняя чурка-педофил, толкает дурь крупными партиями и проводит время с 13-14 летними девочками ???!!! А представь, что эта девочка будет твоей сестрой, или дочкой.
Я взял пример из реального мира, знаю о таком человеке и он к сожалению, сейчас на свободе. Так что твои псевдо-филосовские рассуждения херня из под коня, ты зарываешься в своих абстракциях забывая о простой морали.
>>2608495 Да нормальный видос, снимали же её родители и выкладывали потому что это выглядит смешно. О чем люди думают то и пишут. Исходя из этого мнения можно вообще считать что нельзя выкладывать видео с маленькими девочками, а не то за педойфила примут.
>>2608961 >Не понял, что это значит Забей. У тебя есть windows.h, его хватит. >что этот цикл делает 255 раз Печатает текст 256 раз (8 бит) разными цветами, очевидно же.
>>2608949 > А представь, что эта девочка будет твоей сестрой, или дочкой. тян не человек
если ты деспотичный додик-даун и считаешь детей своей безмозглой собственностью, то мне тебя жаль
минвайл жизнь так устроена - что чайлд при ините ролит рандом спеки, и хоть ты обосрись - но если чайлд сролил быть малолетней шлюхой и торчеебом (в зассаных дворах пидербурга), то это будет именно так и никак иначе
себе в тарелку смотри додик
если что то неустраивает зарабатывай на большее количество детей, сделай их 10 штук, и хотя бы один я думаю вырастет достойным человеком
ну а если ты тупорылая нищенка с двухзначным интеллектом, то тебе не нужны дети. ведь их основная функция это передача капитала, а у тебя его нет ахаха
так что отмени трясску и не завидуй успешным мужчинам с юга.
>>2608965 > Исходя из этого мнения можно вообще считать что нельзя выкладывать видео с маленькими девочками, а не то за педойфила примут я бы так и сделал кстати
это самое натуральное растление малолетних
овуляшек с ютуба делающих из своих детей блядей на пожизненное нахуй, как и фк
>>2609014 >ЫГЫГЫГЫГГЫ МОРАЛФАААГГ В ТРЕДЕ, ЩА ЕГО ЗАТРАЛЛЮ ЫФХХЗВФПАХАХАХА ЫЫЫЫЫЫЫЫЫЫЫЫЫ >Я ТИПА СМИЩНОЙ ТИПА ОЛД, КОРОЧ ВСЕМ СМИЯТЬСЯ, Я ЕГО ЗАТРАЛЛИЛ, ВСЕМ СМОТРИТЕ НА МИИЯНЯЯЯ ЫЫЫЫЭАЭАЭ
Дауненок, что ты забыл в этом треде ? Пиздуй в /b/ыдлятню, там тебе будут рады.
>>2609020 Зря ты это написал дурачок, тролль мамкин))) В отличие от /b/ этот тред долго не будут стирать, считай тебе повезло если ты сидишь через VPN+Tor))) Посмотрим как ты будешь улыбаться, когда когда с тебе придут с обыском)))
Ты сам не понимая того, демонстрируешь свой низкий интеллект. Сначала ты писал что тян не человек, и то что педофилия это нормально >>2609014 >так что отмени трясску и не завидуй успешным мужчинам с юга
Потом ты пытался "траллировать" и писал что выкладывать видео в которых есть девочки не нормально. Ты сам того не понимая палишь себя, своей же тупостью. Сам факт того что ты доебываешься до анонов, и засираешь этот тред, посвященный языку Си, уже не нормально. Малолетний выблядок, ты занимаешься хуйней, портишь этот тред засоряя его мусором и доёбываясь до анонов, считаешь себя смешным и думаешь что твоя "псевдоанонимность" спасет тебя от ответственности и того что ты написал выше, но это не так, не забывай кому пренадлежит этот форум, не забывай что это не /b/ а когда нариману придёт запрос на твой ip-адрес, он особо мешкаться не будет (потому что должен по закону).
Я тебе дам совет, остановись анон, закрой вкладки с этим сайтом, посмотри фильм, почитай книгу или подготовься к экзаменам в своей школе/ПТУ или куда ты там ходишь, перестань портить этот тред и свою репутацию, пока ты не нахлобучил себе ещё больше проблем. Тебе ведь не нужно, чтобы в 6 утра в квартире у твоих родителей выбивали дверь ?
>>2609070 какой же ты душный зачморенный низушник...
я не школьник, я уже давно знаю что анонимности не существует, i'm ok with it
> засираешь этот тред это называется свободное общение, не, не слышал додик?
я увидел шебм с лолькой и мне пригорело от того что мл треды сносили из-за кривых нейро-лолей которых все обсуждали в техническом аспекте работы генерации
а что до моей позиции - я против педо-истерии, когда конченные кипишеры типа тебя или овуляшек на площадке - упаковывают рандом хуя присевшего на лавку передохнуть
или когда здоровая ебливая шалава сама скачет по хуям, но виноваты конечно же не они
поэтому пройди нахуй со своим манямиром и трясской.
>>2609082 Двачедаун ебанный, вжлинк мамкин, посмотрим кто из нас додик, и кто трястись будет, когда к тебе и твоим родакам в 4-6 утра придут дяди в форме, когда заберут твой комп. (и не только), твои родители будут визжать и охуевать от сыночки-долбоеба, а ты будешь с сонливым испуганным ебалом, своим тоненьким голосочком, оправдывать перед камерой всё что ты тут написал, следователь с радостью запишет это в рапорт)))
>>2609135 Анон хватит спорить с дебилом. Ты ж понимаешь, что он будет стоять до последнего, оставляя последнее слово за собой. Маняврирует, ставит анонов в неловкое положение за видосы, пишет что он против педоистерии, хотя триггерится на видос как педоистеричка. Я вот вообще увидел в том видео, что анон >>2607998 хочет показать, типа он как кот пытается что-то понять внимательно слушая других анонов, и было в тему, кстати.
Так что отпусти ситуацию, чуваку просто надо свое говно излить, поизливает да съебет.
%c %d %i %е %f %g %о %s %x %р %n %u %[]Читает одиночные символы Читает десятичное число Читает десятичное число Читает число с плавающей запятой Читает число с плавающей запятой Читает число с плавающей запятой Читает восьмеричное число Читает строку Читает шестнадцатиричное число Читает указатель Получает целочисленное значение, равное числу прочитанных символов Читает беззнаковое целое Сканирует множество
А почему столько одинаковых знаков для одного и того же?
>>2609818 Не совсем строка, потому что нет завершающего 0. Поэтому просто массив из двух байт, 8 и 9. Char часто обозначает просто байт, а уж по совместительству массивы байт могут являться строками в кодировке ascii.
Кстати анон, тут ещё такой прикол... Когда я объявлял массив я использовал длину другого массива, т.е. что-то вроде такого: short unsigned int new_array[wcslen(dif_array)]
Теперь то я знаю что так делать нельзя, т.к. получается этот массив будет иметь неопределенное поведение, для таких целей нужно использовать выделение в куче calloc() и memset() (чтобы избавить массив от мусора и заполнить нулями на начальном этапе), я правильно понимаю, или есть какой-то способ попроще?
>>2610019 ну если тебе массив определенного размера int array[4] - создаст массив из четырех интов на стеке если тебе массив в куче, то любым из alloc-ов: void malloc(size_t size) - выдаст тебе указатель на первый байт области памяти, что ты выделил, т.е. если тебе нужно 4 инта, каждый который по 4 байта, то тебе нужно size = 4 4 аналогично можно calloс(4,4 )
memset-ом ты можешь заполнить область памяти какими-то значениями,: memset (src, 'a', 10) - заполнить десятью символами 'a' а вообще подводных много https://habr.com/ru/post/272269/
>>2610019 Ещё есть ньюанс, функция malloc выделяет память, которая будет содержать неопределенные значения, а calloc выделяет память и заполняет её нулями.
Или вот ещё прикол. Думаешь что объявление в функции char *str = "stroka"; и char str[] = "stroka"; это одно и то же? А вот и нет. В первом случае память со строкой будет доступна и после выхода из функции, а во втором случае строка создаётся в стеке функции, который перестанет сосуществовать после выхода из функции.
>>2610304 >В первом случае Память не выделяется в принципе, юзвер просто срет по адресу в созданном указателе говном. Если в следующей строчке юзвер создаст еще один указатель, который попадет в расположенный рядом участок памяти, программа вместо выполнения пошлет юзвера на хуi.
>>2610304 >>2610317 ЕМНИП в первом случае это указатель на read-only секцию со статичными данными (например кусок загруженного в память .exe), при некоторых усилиях можно ее перезаписать конечно.
>>2610334 Вот это я имею в виду. Записать в такую строку не получится, поскольку та память защищена флагом в операционной системе, но если бы получилось, то изменились все три строки, поскольку видно что везде используется один и тот же адрес.
>>2610304 >char *str = "stroka"; >и >char str[] = "stroka"; >это одно и то же? Ну нет, я не настолько плохо знаю Си. Я уже чего только не делал с массивами и указателями (двойными, тройными и т.д.) А так да, ты всё верно подметил, я только недавно, посмотрев в очередной раз в отладчике, заметил что при вызове calloc массив при инициализации заполняется нулями.
>>2610168 И что ты мне это подсовываешь, шиз? Таблетки надо было принимать твоей мамашке, когда она была тобою беременна, так бы, возможно, у мира было бы в распоряжении на одного дегенерата меньше. Как ты это объяснишь, уёба: >%c >%d ?
>>2610540 Да вроде только при первом запросе на выделение страниц процессом. В целях безопасности, чтобы данные из старого процесса не попали в хитрые лапки.
>>2611353 Под каждое устройство, операционку и железо свои либи и api. Мне кажется без asmа особо далеко не уйдешь на одном Си.
Вот пример написания драйвера (на Си, то что там C++ на смотри, просто по умолчанию в доке все примеры под плюсы пишутся, хотя там чисто сишный код) из документации Microsoft.
Ещё нужно изучить собственно саму железку, для которой будешь писать драйвер (Datasheet) и интерфейс, к которому подключена железка, например, PCI, SPI и т.д. Ну и общие принципы драйверописания (что такое IRQ, DMA, режим ядра, пространство ввода-вывода и т.д). Знание ассемблера при написании скорее всего не понадобится, но бывает полезно при отладке.
>>2613905 Я уже узнал, оказывается HeapAlloc лучше использовать при вызове из DLL, т.к. при вызове malloc из DLL нужно оттуда же вызывать free, иначе существует вероятность повредить данные выделенные в куче, а лучше всего, если пишешь под винду всегда использовать HepAlloc, и дело тут не в проприетарности, а в том что винда так устроена. Но я пока что на этапе лишь изучения джедайских искусств, поэтому обхожусь статической линковкой без использования DLL и использую malloc (не смотря на частое использование методов WinAPI).
>>2613905 Actually, malloc() (and other C runtime heap functions) are module dependant, which means that if you call malloc() in code from one module (i.e. a DLL), then you should call free() within code of the same module or you could suffer some pretty bad heap corruption (and this has been well documented). Using HeapAlloc() with GetProcessHeap() instead of malloc(), including overloading new and delete operators to make use of such, allow you to pass dynamically allocated objects between modules and not have to worry about memory corruption if memory is allocated in code of one module and freed in code of another module once the pointer to a block of memory has been passed across to an external module.
>>2614454 БЛЯДЬ ИДИ НАХУЙ ПЕТУХ!!!! Я ТЕБЕ УЖЕ ПИСАЛ, СУКА ТЕБЕ МАЛО БЫЛО ПЕТУШОНИКС ЕБУЧИЙ!!!? РЕШИЛ ЧТО ТЫ ЛИНУКСОИД НО ТЫ НИХУЯ СКОРЕЕ ВСЕГО НЕ ЗНАЕШЬ ПРО ЛИНУКС, ТВОЙ УРОВЕНЬ ЭТО МАКСИМУМ UBUNTU СКАЧАТЬ ЧТОБЫ В ВК ПОСИДЕТЬ И РАССКАЗАТЬ ВСЕМ КАКОЙ ТЫ ОХУЕННЫЙ ЛИНУКСОИД, ИДИ К ЧЁРТУ СО СВОИМ ТУПЫМ ЖИРНЫМ ТРОЛЛИНГОМ, ПЕРЕСТАНЬ ПОРТИТЬ ТРЕД, ЛУЧШЕ ПОМОГИ АНОНУ, А ЕСЛИ НЕ МОЖЕШЬ ПОМОЧЬ, ТО ИДИ НА ХУЙ ИЗ ТРЕДА СУКА!!! ЭТОТ ТРЕД СОЗДАН ДЛЯ ПОДДЕРЖКИ, ВЗАИМОПОМОЩИ ДРУГ ДРУГА В ТЕХНИЧЕСКИХ ВОПРОСАХ, А НЕ ДЛЯ ТУПОГО ТРОЛЛИНГА, ИДИ В /b/ БЛЯДЬ!!!
>>2614511 ... >>2614454 > >сдл > какаято нинужная проприетарная парша Это тролинг я надеюсь? С сдлем пока лень разбираться, глфв нормально под вейленд работает.
>>2614688 >... Извини, видимо я тебя перепутал с другим аноном, думал это ты >>2613948 опять пишешь, просто в этом треде был один петушоникс который доебывался до анонов и портил тред.
>>2614688 >... Ещё раз прошу прощения, просто это тематический тред, сильно раздражает когда много пишут всякие клоуны не в тему, и засоряют тред всяким мусором, а он и так еле живой. Всё таки я рассматриваю это место как площадку, где аноны могут обмениваться технической информацией, давать полезные советы, делиться опытом, ссылками на статьи и литературу, помогать друг другу.
Анончики, здравствуйте. На Ютубе есть некий Александр Григорин, продает свои курсы по программированию, подскажите, есть ли у него GitHub или типо того, просто хотелось бы посмотреть на его код-стайл или хотя бы уровень сложности кода, а то слова-то красивые подаёт, но смущает, что сидит на дваче, да и к тому же сидит на тупичке Гоблина и смотрит его до сих пор, да и прогоняет слишком популистские темы
>>2615320 Меня больше ебет то, что он о себе говорит, какой-то он мутный и слишком выебистый, говорит, что участвовал в написании софта для китайских ледоколов и писал программы по типу CAD для графики, вот и интересует соответствует ли его гонор с его реальными заслугами
>>2615346 Если сомневаешься в раздаче, скачай на линуксе или в виртуалку и глянь, что там. Хз, какой малварь может быть в раздаче с видеозаписями, максимум раржипег какой-нибудь, и то врядли.
>>2615407 ВМ это часть диска в любом случае, вирус может и дальше распространиться
У меня просто на Винде стала командная строка появляться внезапно, боюсь как бы какой-то вирус или программу шифровальщик, или ещё хуже программа вор не закачал, проверял Malware bytes, ничего не нашло, из-за чего причина, как думаете, анончики
>>2615613 >У меня просто на Винде стала командная строка появляться внезапно, боюсь как бы какой-то вирус или программу шифровальщик
Шифровальщик маловероятно, ты как обычный пользователь скорее всего не подцепишь шифровальщика (а если подцепишь то он не станет работать), тем более если ты находишься в RU (как бы это печально не звучало, но все серьезные шифровальщики из России)..
>>2615613 Хак. группировки которые зарабатывают на шифровальщиках, интересуют в основном крупные акулы бизнеса, их задача, это в первую очередь взломать корпоративную сеть, скомпрометировать контроллер домена, удалить бэкапы, "выпустить своего монстра" чтобы зашифровать сеть, и выставить ценник на миллионы долларов, а обычные юзеры из RU их не интересуют, так что на счёт шифровальщиков расслабься.
>>2615959 Спасибо за совет и ссылочку, собственно Defender я не выключал, он у меня всегда стоит по дефолту, просто скачал малварьбайтс и сканирую иногда систему, а картинка сразу навеяла воспоминания о байках Мурка, где он рассказывал как его вызвал фотограф, чтобы закинуть денег на биткоин кошелек, чтобы получить ключ для расшифровки своих файлов
>>2616074 Например? По его фразам и приколам иногда прослеживается что-то битардское, но я думаю, что это отпечаток той интернет культуры, которая была в его молодости. Не обязательно, что он сейчас капчует.
>>2616078 Типо в середине видео останавливается, и спрашивает:"Хуй будешь?", или представляется в начале на Японском: "хай-ме-ма-ши-тэ, ва-ТА-ши НО на-МА-е ва Александр Григорин де-су." ?
>>2615342 >для китайских ледоколов Не, ну, если он писал такой софт, чтобы взламывать в киберпространстве какие-нибудь "Орасаки" или "Дойче Накасоне", то это, конечно, серьёзнейший тип и ему стоит верить и ему и его скилам. Это однозначно!
Есть тут эксперты по QT? Кто может подсказать, в чём сцуко проблема? Почему такие охуевшие визуальные баги? Линия должна по сути, просто связывать два прямоугольника, но она ведёт себя как ебанутая, когда начинаешь прямоугольники двигать.
>>2616591 Угу, так и есть, он говорил вроде бы, что даже там на верфи был, не знаю, можно ли ему верить, так как никаких документов не показывал, а это настораживает
int len; double vla[len]; //UB, понятно потому что len неопределено printf("sizeof vla = %zu\n", sizeof vla);
int len = 0; double vla[len]; //UB, хотя возможно есть расширение компилятора printf("sizeof vla = %zu\n", sizeof vla);
int len = 100; double vla[len]; //ну тут то все в порядке? printf("sizeof vla = %zu\n", sizeof vla); //бабах - UB, evaluation of uninitialized vla
Еще красивое
int m = 10, n = 20; double A[n][m]; int i = 0, j = 0; printf("sizeof is %zu\n", sizeof A[++j][++i]); printf("now j is %d, i is %d\n", j, i); printf("sizeof is %zu\n", sizeof A[++j]); printf("now j is %d\n", j); // what is printed here? 0, 1, or 2?
>>2616752 Анон, ты настоящий Джокер. Объясни пожалуйста, почему префиксный инкремент ++j, сработал на printf("sizeof is %zu\n", sizeof A[++j]);, с другой стороны мы знаем что А - это указатель, значит можем привести к виду *(A+j=j+1), получается сначала срабатывает доступ к элементу, но лишь потом инкрементируется j т.е. как две последовательные операции, именно поэтому j увеличивается на 1 только после явного указания A[++j], я правильно понял ?
Хотя почему тогда ++i не увеличился... получается два инкремента перекрывают друг друга, и не дают правильно выполнить операции... Нужно в дизассемблере посмотреть.
>>2616821 Мне это будет сложно объяснить. Автор загадки пишет, что A[++j][++i] не срабатывает, потому что компилятор точно видит что там просто double (из double A[n][m];) А sizeof A[++j] срабатывает, потому что компилятор видит тип VLA, double[*] По видимому, фокус в том, что sizeof от VLA должен работать в рантайме, а не в компайл тайме...
>>2616857 >что sizeof от VLA должен работать в рантайме Лол, буквально недавно поднимал эту тему, про инициализацию таких массивов в автоматической памяти, и мне никто не смог дать нормального ответа, и тем более ничего не писали про VLA, но у меня ошибка в коде была в том что я ещё забывал правильно инициализировать массивы в стеке (и в куче), из-за чего он содержал изначально мусор и программа неправильно работала, а всего то нужно было его нулями затирать.... но это уже другая история.
>>2616919 Если в куче, то вроде как можно просто calloc место malloc использовать. А инициализация нулями в современных Сях пишется char arr[100] = {0}, но на VLA это почему то не работает.
А есть простая графическая библиотека для си? Кроссплатформенная. Куда не гляну - всё говно: sdl и аллегро тормознутые какие-то, и sdl даже круг нарисовать не умеет. Есть чё попроще? Для начинающего? Типа вот это фон, вот кружок нарисуй вот спиральку теперь очистки экран кроме фона. А не вызывай 20 функций для этого и мурыжь текстуры туда сюда обратно.
>>2617434 > всё говно: sdl это одна из самых быстрых кроссплатформенный и наиболее проработанных, которая используется везде от стима до UE > даже круг нарисовать не умеет. Есть чё попроще? Для начинающего? Типа вот это фон, вот кружок нарисуй вот спиральку теперь очистки экран кроме фона. А не вызывай 20 функций для этого и мурыжь текстуры туда сюда обратно а вот это, что ты описываешь, вместо мурыженья текстур - это как раз и есть говно и тормоза, сначала разберись в вопросе, а уже потом свое ценное мнение оставляй про скорость работы для начинающих, кому скорость не нужна, а нужно просто рисование каких-то примитивов есть всякие либы надстройки, открываешь гугл и находишь любую понравившуюся https://www.ferzkopp.net/Software/SDL2_gfx/Docs/html/index.html только в современном мире в реальных приложения отрисовка на холсте старыми методами винды уже давно в прошлом, используют контекст рендера opengl, так и даже он уже последние года отсиживает и вытесняется вулканом с одной стороны и wgpu с другой
функций как нарисовать круг/спиральку на чистом SDL2 в гугле тоже вагон, просто копируй и используй, но новички видимо теперь даже в гугл не умеют
>>2617452 у вас там сегодня день открытых дверей или как? человек спросил как создать surface для vulkan ты что там на консоли собрался выводить, ascii-render ему предложишь как альтернативу?
>>2617434 Рисовать кружочки - это на самом деле путь-ловушка. Поэтому на таких примитивах никто и не акцентируется. Тут лучше смотреть в сторону шейдеров.
>>2618583 Ну нет не совсем ещё, я уважаю этот тред и он является для меня единственным и по настоящему ценным местом на дваче, ну ещё тред по ассемблеру, но его я пока что просто читаю.
Здарова, отцы. Расскажите, существуют ли джуниоры Си девелоперы? Если да, то чем они занимаются? У меня вообще нет представления о том, что пишут на Си, только какие-то возможно устаревшие представления о каких-то заводах, микросхемах и т.д. Вообще, если кому не лень, поясните за Си в 2023 году, не конкретно в какой-то стране, а в целом, чем живёт.
>>2618935 любые вычислительные либы под любые задачи, хоть для верчения на серваках сайтов, что потом только дергается js или еще чем пишут под кучу портативных устройств в куче компаний, эти ваши умные часы и микроволновки пишут для дронов... много всего короче на любой вкус и цвет
>>2618935 >Расскажите, существуют ли джуниоры Си девелоперы? Ебать ну естественно! Они существуют потому что есть рынок и есть капитализм. Компания сама не заинтересована в обучении, учится - это твоя задача, а задача компании - делать деньги. Соответственно, недостаток опыта она всегда конвертирует в свою пользу. Компании выгодно найти дурачков, так называемых "джуниоров", которые будут пахать по 8 часов в сутки за 25 тысяч рублей в месяц. Тебя будут ебать по-всякому, продавливать на самую низкую зарплату, ниже дворника, при этом вешать обязанностей как на министра финансов. Короче, "джуниор" это синоним "дешёвого лоха".
>>2619222 Я немного объебался со скриншотами 1 скрин - это как у него было на Си. 2 и 3 - а вот так стало на Си++ (удобное использование и всякие типы и контрль компилятора в либе). При этом код сдулся в 3 раза, что должно по идее лучше сказаться на качестве. По бинарникам получаемым тоже вроде все хорошо, нет какого то лютого оверхеда. Не, правда, я без троллинга, я сам дед 40 лет, но когда я беру условную ардуинку, мне хочется писать надежно, а не как диды на Си писали... Но я на заводах не работал.
>>2619223 >а не как диды на Си писали То чувство, когда ты зумер который топит за Си (из-за того что был знаком с очень крутым инженером (больше 40 лет) который замотивировал серьезно изучить Си)) а тебе пишет дед про C++ называя дИдами тех кто пишет на Си. :)
>>2619223 > хочется писать надежно На контроллерах это не про С++. Особенно когда while(1){} это UB. Да и большого количества абстракций стараются избегать. Можно, конечно, писать на Си с классами, но от того же сишного кода это будет мало отличаться. Поэтому в критических к надежности системах лучше на крестах не писать, а на них и не пишут. Но поиграться с пердуинками или с stm32 на крестаэ прикольно, ради этого хотел бы вкатиться в кресты.
>>2619329 >На контроллерах это не про С++. > Поэтому в критических к надежности системах лучше на крестах не писать Это очень устойчивый миф, который годами не могут развеять. >. Особенно когда while(1){} это UB. Страшилка уровня /pr. while(true) { int const volatile x = 1; } В Си тоже полно UB, это никого не останавливает. >Да и большого количества абстракций стараются избегать. В с++ много compile-time и zero-cost. Которые дают удобные и мощные абстракции на стороне программиста, которые превращаются в пару инструкций asm.
>>2619223 Нууу 3000 строк тоже можно сжать используя макросы. Главное же - в данном сишном коде легко модифицировать одну конкретную функцию, буде это понадобится, добавив любые безумные отступления от шаблона.
>>2619598 >используя макросы. Угу, сейчас бы макросы в критическом коде использовать, без контроля типов компилятором. >в данном сишном коде легко модифицировать одну конкретную функцию Может можно, а может нельзя, ведь 99% случаях придется перелопачивать и остальные функции, потому что они были созданы методом копипасты, спасибо отсутствию перегрузок, и какую-то пропустить. Ведь про _Generic никто не знает, в книгах дидов его не было.
>>2619578 > Это очень устойчивый миф, который годами не могут развеять Ты тоже этого делать не собираешься, похоже. А я бы послушал. И я не пытаюсь доебаться ес что, просто все что я писал - было в основном под контроллеры, опыта в других областях почти нету. Но базовая программа на большом количестве контроллеров содержит бесконечный цикл. ОСРВ FreeRTOS буквально состоит из множества while(1){}, и как там что-то писать на крестах? > В Си тоже полно UB, это никого не останавливает Потому что о нём заранее знают, есть тот же embedded c coding standard. Писать надёжно в контексте контроллеров - это не про кресты. > В с++ много compile-time и zero-cost. Которые дают удобные и мощные абстракции на стороне программиста, которые превращаются в пару инструкций asm Здорово, только писать на Си с классами писать не всем удобно, да и хз как это вообще делать под некоторые контроллеры. Когда говоришь, что здорово писать на крестах под эмбедед, лучше уточни под какую конкретно железку ты пишешь. Асло, вот тут чел интересно пишет про краткость кода https://250bpm.com/blog:4/ интересно сравнение без шизы и поливания говном одного языка, по сравнению с другим. Я сам пытаюсь вкатиться в кресты, но больно дохуя там надо знать. А ещё заметил, что почти любой вопрос по крестам скатывается в долгое обсуждение стандартов, которые подзаебывают, и учить их ебанешься кмк. Но это чисто субъективная херня.
Парни, что-то не могу нагуглить нужную инфу, а потому продолжаю тупить, потому прошу вашей помощи:
Ситуация следующая - есть строка, допустим "hello", получается, что в памяти эта строка выглядит как набор ячеек памяти (массив) определённого размера. Допустим, если мы эту строку занесли на языке ассемблера nasm в переменную txt размером db (байт), то получается, что переменная txt это набор из идущих друг за другом ячеек размером в байт, а каждый символ в этой строке это определённый набор нулей и единиц каждый в своей ячейке, т.е. первая ячейка в этом массиве будет выглядеть так 0110 1000 (код "h" из таблицы ascii), вторая ячейка 0110 0101 (код "е" из таблицы ascii), и т.д., и до тех пор, пока строка не закончится, правильно понимаю? А если, допустим мы выделим под переменную txt размер типа данных dw (два байта), то ячейки памяти с этой строкой будут выглядеть так - 0000 0000 0110 1000 (код "h" из таблицы ascii), 0000 0000 0110 0101 (код "е" из таблицы ascii)? Правильно понимаю? И получается, что общий размер строки "hello", если под неё выделяются ячейки размером байт (т.е. на языке ассемблера инструкцией db), составляет 5 байт?
Прикол в том, что он показывает, что инструкция, которая копирует строка в регистр занимает 8 байт, т.е. в независимости от типа данных или длины строки, он пишет, что инструкция занимает 8 байт. Мб, какой-нибудь дизассемблер сможет показать сколько именно ячеек памяти занимает строка, и как вообще выглядит она на уровне нулей и единиц, но я чёт не знаю какой дизассемблер поставить в линукс, который сможет показать именно на уровне нулей и единиц.
>>2619800 >Мне хочется узнать именно как на уровне нулей и единиц представлена строка. Я открою тебе секрет, малыш. echo -n hello|xxd -b 00000000: 01101000 01100101 01101100 01101100 01101111 hello
>>2619824 Как это посмотреть на gdb? У него есть есть команды x/(набор параметров), но чёт они не выводят то что я хочу.
>>2619835 Так перевести любую строку в двоичный вид и я смогу, даже в тетрадке, даже ручкой, даже гелевой.
>>2619836 >Нет такого Да, ладно, мб неправильно выразился, мб память представлена не "ячейками", а сплошным массивом нулей (свободная память), либо сплошным массивом нулей и единиц (занятая). >нулевые байты после каждого символа И этих нулевых байтов будет один, если dw; три если, dd; семь, если dq?
>>2619913 Да, всё, можешь больше не отвечать! Я прозрел и теперь понимаю, как организована память в компьютере и что значат эти ваши db, dw, dd, dq. Спасибо анонам, которые попытались подвести меня до ответа.
>>2619739 >Ты тоже этого делать не собираешься, похоже. А я бы послушал. Так полно конференций где серьезные дядьки это делают, скрины то с них, а они уже почти 10 лет этим занимаются, а я кто. Да и не хочу я прямо в Си треде таким заниматься, просто недоумеваю почему кто-то выбирает Си, как это происходит, какая у этого причина, ну кроме того что люди слышали что 10-20 лет назад можно было только на Си писать под микрухи. >Но базовая программа на большом количестве контроллеров содержит бесконечный цикл. ОСРВ FreeRTOS буквально состоит из множества while(1){}, и как там что-то писать на крестах? Ты наверное прикалываешься, потому что я в том же посте написал как пишется бесконечный цикл и даже скинул пункт стандарта, который объясняет почему. Но ты просто еще раз повторяешь что бесконечный цикл не написать. > Писать надёжно в контексте контроллеров - это не про кресты. Ну да, а си это пиздец как надежно. Я понимаю если бы речь шла про прости господи Раст, но говорить что Си++ менее надежен это мда. Я не исключаю что нельзя пользоваться всеми фичами С++, и надо смотреть в ассемблерный выхлоп, и если у тебя там шаблон разворачивался в одну инструкцию, а после каких-то изменений стал разворачиваться в страницу кода, это проблема, и надо включать голову - но голову и в Си надо включать, у меня часто волосы дыбом от того какой код пишут и уверяют что он надежный. >только писать на Си с классами писать не всем удобно А примеры не про Си с классами, а про например constexpr вычисления времени компиляции. Про то что это будет не приседание с || и && с магическими битами, а вменяемый АПИ, когда ты явно говоришь что включаешь. Грубо говоря разница между пик1 и пик2. (Это не идентичный код, просто первый попавшийся с гитхаба). >лучше уточни под какую конкретно железку ты пишешь. Сейчас ни под какие не пишу, только пишу либу под llvm-mos чтобы собирать под C64/NES эмули.
>>2619764 Ради интереса могу посоветовать еще узнать как выглядит в памяти строка "helloµ死👋", и как это зависит от кодировки файла и кодировки терминала операционной системы.
>>2620039 Вот это интересно, анон, спасибо за совет - надо будет глянуть. UTF-8, пишут в педивикии, использует переменное кол-во байт, следовательно, я так понимаю строка в этой кодировке может быть не набором из однобайтных "ячеек", а смешанным набором из однобайтных и до 4-х байтных "ячеек". Только мне вот теперь стало интересно что за тип данных нужно указать в ассемблере, чтобы можно было работать с кодировкой UTF-8? Если указать dd, то это же может быть неэкономично?
>>2620246 https://ru.wikipedia.org/wiki/UTF-8 >UTF-8 (от англ. Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-бит») — распространённый стандарт кодирования символов, позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4), и обеспечивающий полную обратную совместимость с 7-битной кодировкой ASCII. Стандарт UTF-8 официально закреплён в документах RFC 3629 и ISO/IEC 10646 Annex D.
Любая строка это массив байтов, просто зависит от того, где они и как будут обрабатываться. Суть в том, что Юникод являющийся современным стандартом, включает в себя знаки почти всех письменных языков мира, более того, практически все (или боьшинство) языков можно закодировать при помощи двух байтов, в Шиндовс для этого существует псевдотип wchar_t но на самом деле он является макросом для short unsigned int (между ними нет отличий), в тоже время существуют различные инкарнации ANSI (KOI-8, CP-1251, 1252 (256 символов, 8 бит) ) из которых 0 до 127 - изначальные символы ASCII, которыми как рыз ты и пользуешься при вводе английского текста.
Как ты можешь догадаться, всё что нам нужно, это уметь преобразовывать "широкие" байты (wchar, или short unsigned int) в последовательность обычных байтов, и обратно для того что бы мы могли манипулировать ими. Например ? Нужно написать утилиту, которая будет запрашивать в консоли название файла на русских символах (или испанских, хоть японских) после чего программа должна будет прочитать, содержимое файла а потом например перевернуть данные и записать в другой файл, но суть в том что ты не можешь просто так работать с Юникодом как с обычным ANSI (ASCII), т.к. каждый символ на самом деле кодируется двумя байтами, и просто изменив последовательность, ты получишь ошибку.
Для того чтобы этого не возникло, существуют методы, которые позволяют преобразовывать кодировку из ANSI в Юникоде и наоборот из Юникода в Анси.
MultiByteToWideChar (преобразует ANSI в Юникод (двухбайтовую строку, т.е. каждый символ два байта)) и WideCharToMultiByte (преобразует Юникод в ANSI (мультибайтовую строку, т.е. в 8-битную последовательность байтов))
unsigned long get_string( short unsigned int stn, //массив куда передастся мультибайтовая строка const size_t BUFFER_SIZE, //размер буфера (256) TCHAR messg); //сообщение для вывода в консоли
int ReadData(char read_data, short unsigned int file_name); int WriteData(char write_data, short unsigned int file_name); int ReverseStringW(short unsigned int rev_data); int StringReverseA(char pMultiByteStr, unsigned long cchLength); //объявим и инициализируем новую структуру //в поле field структуры SaveStrings //запишем в её поле field строку typedef struct SaveStrings{ char field[1024]; }SaveStrings;
//ГЛАВНАЯ ВЕТКА ПРОГРАММЫ int main(void){ SetConsoleOutputCP(CP_UTF8); SetConsoleCP(CP_UTF8); //массив в который будет записано название файла short unsigned int wstr = (short unsigned int)calloc(255, sizeof(short unsigned int)); //char read_data[1024]={0};//массив в который запишутся данные из файла SaveStrings saveobj = (SaveStrings)malloc(sizeof(struct SaveStrings)); memset(saveobj->field, 0, sizeof(saveobj->field)); //получим название файла, запишем имя в wstr unsigned long readble = get_string(wstr, 255, "Название файла: "); //объявим массив copy длиной wstr+2 short unsigned int file_name[255]={0}; //скопируем часть массива wstr, на два символа меньше wmemcpy(file_name, wstr, (wcslen(wstr)-2)); //прочитаем данные из файла в буфер saveobj->field //в виде обычного набора байтов в char-массиве (МультиБайтовая Строка) ReadData(saveobj->field, file_name); //Перевернем мультибайтовую строку. StringReverseA(saveobj->field, strlen(saveobj->field)); //Запишем перевернутые данные в другой файл WriteData(saveobj->field, L"reverse_output.txt"); }
int WriteData(char write_data, short unsigned int file_name){ //t - число прочитанных данных unsigned long t;
//Дескриптор файла //для записи данных HANDLE hFile = CreateFileW( file_name, // имя файла GENERIC_WRITE, // режим доступа 0, // совместный доступ NULL, // SD (дескр. защиты) CREATE_ALWAYS, // как действовать (Открыть существующий) FILE_ATTRIBUTE_NORMAL, // атрибуты файла NULL); // дескр.шаблона файла
WriteFile( hFile, // дескриптор файла write_data, // буфер данных strlen(write_data), // число байтов для записи &t, // число записанных байтов NULL ); // асинхронный буфер
return 1;
}
int ReadData(char read_data, short unsigned int file_name){ //n - буфер данных //t - число прочитанных данных unsigned long n, t;
//Дескриптор файла //для чтения данных HANDLE hFile = CreateFileW( file_name, // имя файла GENERIC_READ, // режим доступа FILE_SHARE_READ, // совместный доступ [Разрешено Чтение] NULL, // SD (дескр. защиты) OPEN_EXISTING, // как действовать (Открыть существующий) FILE_ATTRIBUTE_NORMAL, // атрибуты файла NULL); // дескр.шаблона файла
if (INVALID_HANDLE_VALUE == hFile){ _tprintf(_TEXT("\nError: INVALID_HANDLE_VALUE\n")); return 0; }
do{ ReadFile( hFile, //дескриптор файла read_data, //буфер данных 1024, //размер записыаемых данных &t, //колличество прочитанных данных NULL); //асинхронный буфер
}while(t);
//закроем дескриптор на чтение файла CloseHandle(hFile);
return 1; }
int StringReverseA(char pMultiByteStr, unsigned long cchLength) { short unsigned int pWideCharStr; int LenOfWideCharStr; int fok=0;
//вычисляем колличество символов, необхоимых //для хранения широкосимвольной версии строки. LenOfWideCharStr = MultiByteToWideChar( CP_UTF8, 0, pMultiByteStr, cchLength, NULL, 0 );
//Вызываем широкосимвольную версию этой функции //для выполнения настоящей работы fok = ReverseStringW(pWideCharStr);
if (fok){ //преобразуем широкосимвольную строку //обратно в мультибайтовую, т.е. просто последовательность байт WideCharToMultiByte( CP_UTF8, 0, pWideCharStr, cchLength, pMultiByteStr, (int)strlen(pMultiByteStr), NULL, NULL); }
}
//Метод переворачивает набор байтов, изменяя их последовательность. //Алгоритм говно, но я решил не париться. int ReverseStringW(short unsigned int rev_data){
short unsigned int rev_string[1024]={0}; wmemcpy(rev_string, rev_data, wcslen(rev_data)); wmemset(rev_data, 0, sizeof(short unsigned int)); int lnstr = wcslen(rev_string)-1;
>>2620246 >>2620191 Кстати, если вас интересует программирование на Cи в среде Windows, рекомендую книгу: Рихтер Дж., Назар К. - Windows via C C++. Программирование на языке Visual C++ - 2009
>>2620318 Двух байтовый юникод - это UCS-2 (UTF-16), UTF-8 совсем по другому работает, это последовательности от 1 до 4 байт, и таких преобразований ты не провернешь. Алсо в юникоде вообще не любят когда их называют "символами" или "буквами", потому что там "глифы", потому что там есть комбинированные символы. Например, á может храниться как "◌́" + "a", то есть уже strlen() или strchr() нетривиальные, потому что они возвращают размер в байтах, а не в символах, вроде бы.
>>2620330 >Двух байтовый юникод - это UCS-2 (UTF-16), UTF-8 совсем по другому работает, это последовательности от 1 до 4 байт, и таких преобразований ты не провернешь.
Согласен, спасибо что поправил, речь шла именно про двухбайтовый Юникод (он же UTF-16) который используется в Шиндовс для кодировки "широких символов".
>>2620330 > "◌́" + "a" >>2620330 > то есть уже strlen() или strchr() нетривиальные, потому что они возвращают размер в байтах, а не в символах, вроде бы.
Знаю, хотел написать пример широких символов (строки в Юникоде) и в ANSI в gdb но мне чёт лень... Вместо strlen() есть wcslen() и другие аналогичные методы с приставкой W для обрадотки "широких байтов".
>>2620330 Понял анон, спасибо за информацию. А можно об этом в какой-нибудь книге по системному программированию прочитать, потому что я в последнее время читал только вот это >>2620325
(Мне хочется именно по программированию, т.к. я всегда люблю совмещать теорию и практику вместе.)
>>2620340 Нет, это везде. Посмотри на коды на картинке, они двухбайтовые. Глиф собирается из буквы a и значков. Про книги не знаю, не читал, знаю только что есть C/C++/Java либа ICU. Она по идее идет с функциями преобразований какими-то и базами данных символов.
>>2620341 >>2620342 Вот за это я и люблю этот тред, тут появляются умные аноны вроде тебя, поправляют и рассказывают что-то интересное, ещё раз спасибо.
>>2620016 Я не на столько продвинуть как ты, анон. Поэтому элементарно не понимаю, как можно для, например моих микрух использовать С++. Да и во всех гайдах, по которым я учился, использовался Си. Хз короче, пытаюсь вкатиться по учебнику Праты потихоньку, но объем знаний слишком большой, а ведь помимо этого надо ещё и саму архитектуру конкретной микрух хорошо знать.
Как в GCC называется опция оптимизатора, которая для переменных из разных блоков кода не выделяет новую ячейку стека, а использует уже существующую? Например такой код: ``` int main(void) {
{ int x; SetX(&x); } { int y; SetY(&y); } } ``` С этой опцией у переменных x и y будут одинаковые адреса. Как называется эта опция?
>>2621203 Я думал это по умолчанию так, ведь ты новый скоуп открываешь. К локальной переменной же все равно нельзя обращаться после окончания ее лайфтайма, это UB. А опция наоборот существует чтобы отключать эту оптимизацию, для устаревших программ написаных кое-как.
>>2623363 cmake делает по описанию makefile или .sln или что то еще платформенное. Потом оно собирается. Без него ты должен каждый раз ручками где-то править аргументы компилятора - релизная или дебаг сборка, целевая платформа, и т.д.
В C++ треде видимо всем похуй на расход памяти, спрошу тут. Пишу под arduino, пытаюсь в C строки, потому что родной String выжирает очень много памяти. Написал функцию, которая принимает сообщения от сервера и парсит. >topic = "building_a/room_123/switch/light_left" >payload = "on" Оно разбивает на >room = "room123" >cmd = "switch" >sw = "light_left" И передаёт дальше. Я всё правильно пишу? Так и надо?
>>2623712 Нет, все совсем не так, мне сейчас правда некогда пояснять, ну смотри ты начинаешь с копирования массива byte в массив char - зачем? Потом еще sprintf, а перед ним еще и strlen который пробежит всю строку. Потом ты еще раз копируешь все в массивы (хотя strcpy бы возможно соптимизировался быстрее). Не удивлюсь если ты еще и по значению копируешь массивы в process_msg. Думаю C-way было бы просто один раз скопировать топик, заменяя / на \0 и передать указатели на первые буквы слов, и занимало бы это раз в 5 меньше кода.
>>2623712 А вообще, если ты пишешь только обработчик, который с этими строками ничего не делает, то наверное еще более Си-way было бы написать конечный автомат (возможно создать его генератором кода) который вообще ничего не копирует. Ну типа смотрит сдедующий символ, если это / то переключается на следующий анализатор, если буква b, то ожидает следующую букву u, и так до _a, где он просто запишет в целую переменную результат - номер здания.
Пробовал создать заголовочный файл и подключить его в нужных .c файлах, объявив в нём указатель как extern esp_modem_dce_t dce; , а в .с файлах просто как esp_modem_dce_t *dce;
Проект сорался без ошибок, но в реале крашится. Скорее всего я чего-то не понимаю, поэтому объяснил как мог. Сорян.
>>2623735 >ты начинаешь с копирования массива byte в массив char - зачем Мне потом надо проверить payload == "on" например. Я в strcmp не могу передать byte, ему надо char. >Потом еще sprintf, а перед ним еще и strlen который пробежит всю строку. sprintf для вывода текста в консоль для дебага. А без strlen я не узнаю длину строки. Она не передаётся для topic. >один раз скопировать топик, заменяя / на \0 и передать указатели на первые буквы слов Вот это гениально. Я бы в жизни до такого не догадался. Попробую завтра с этим поиграться. Правда не факт, что MQTT либа, которая мой коллбек вызывает, переживёт то, что я ей строку в памяти поменял, которую она мне передала. >>2623755 >конечный автомат Это какое-то нереальное кунгфу, о котором я пока ничего не знаю.
>>2623825 byte это скорее всего unsigned char, то есть скорее всего можно передавать. >sprintf для вывода текста в консоль для дебага. >А без strlen я не узнаю длину строки. Она не передаётся для topic. Я понимаю, но ты просто жаловался что ардуиновский String жрет, но не думаю что он жрет больше чем у тебя тут. Алсо опять же не факт что надо копировать в sprintf для отладки, ты же можешь напечатать debug сначала одну строку, потом другую. >Правда не факт, что MQTT либа, которая мой коллбек вызывает, переживёт то, что я ей строку в памяти поменял, которую она мне передала Не переживет, потому что там const char. Поэтому я написал что ее один раз скопировать все же придется. >конечный автомат Ну это довольно простая концепция так то. Если ты в состоянии state1 и пришел нужный символ ch, то перейти в состояние state2, а если нет - то или ошибка, или что-то другое началось.
>>2624087 > ардуиновский String жрет, но не думаю что он жрет больше чем у тебя тут Он прям в разы должен меньше жрать. Потому что каждый String+String то ли новый String создавал, то ли менял размер буффера и в моих >"MQTT recv(" + topic + "): " + payload; несколько раз пересоздавался буффер внтури, фрагментируя память. Но именно тут это херня. Посмотри пик 1. Именно этот код крашил мне микруху. Причём не каждый раз. Причём там всё зависело от таймингов. Если добавить где-нибудь delay(5) то крашить переставало, либо наоборот ещё чаще начинало. Слишком много плюсов было. А стало пик 2. Память выделяется 1 раз при запуске и дальше пишется в неё весь лог, смещая старый текст. Краши пропали. Хотя из-за таймингов не факт, может просто везёт. >ты же можешь напечатать debug сначала одну строку Там не только вывод в консоль, она там ещё в MQTT отправляет сообщения и для вебсервера их откладывает. >ее один раз скопировать все же придется Ну я в принципе своей конвертацией в char* это и делаю.
А вообще я понял, что я только в начале изучения всякого этого C образного. Там ещё столько всего есть оказывается.
Скажите пожалуйста, почему если тип short занимает 2 байта, а тип double 8, то после компиляции при прибавлении единицы мне выводится в типе double сначала +8 байтов, а затем +2 байта? как такое возможно?
>>2624129 Почему ты решил что "затем +2 байта"? Первый указатель растет на 2, второй - на 8. Ты пользуешься арифметикой указателей, увеличивая его на 1 "шаг типа".
Сап, програмач Джавист, 3 года опыта (банк), писал в основном на спринге (rest + бекенд для личных кабинетов) Сейчас предлагают на работе новый проект: программировать под Java Card Кто имел опыт? Или это болото и лучше туда не лезть?
>>2626252 > Сейчас предлагают на работе новый проект: программировать под Java Card > Кто имел опыт? Или это болото и лучше туда не лезть? Это охуенно. Как МК, только пишешь на урезанной яве. Никакой периферии, только апи. Тройной дэс, ух бля.
Здравствуйте, анончики, учусь в ВУЗе и зашел вопрос о требованиях к джунам, сам в дискуссии не участвовал, одни говорили, что в резюме лучше не врать, ибо мир тесен, разнесут остальным, что ты врунишка, другие говорят, что эти требования как в макросах смехуечков -- "опыт разработки __ года для джуна", так сказать фильтр для тупых, ибо все понимают, что у джуна, ну, максимум год может быть
Поясните, аноны, зачем выделять под массив, в котором width элементов, память под height width элементов? И нахуя там круглые скобки в названии массива? В чем отличие от RGBTRIPLE image [width]?
Все, епта, понял, это так двумерный массив делается через указатель, ну и залупа. Почему нельзя просто сделать RGBTRIPPLE [height] [width]? Весь массив это просто указатель
>>2631028 Потому что [height][width] это не двумерный массив, а массив массивов (а значит, массив указателей), иными словами они могут вести в разные места, а не быть последовательно в памяти, и доступ там через лишний указатель. В c++23 есть Multidimensional subscript operator array[height, width], но в Си такого нет, кажется, даже через расширения. Поэтому и делают по старинке, 1 плоский массив и доступ через i + j * width.
>>2631435 Нихуясе прикол, я думал, что двумерный массив это и есть просто массив массивов. Понял, спасибо. Обращаться к i элементу первого массива, получается, тогда надо так: звездочка(m[0] + i звездочка sizeof(int))? Если массив из инт офк
скажите пожалуйста, я вот одно не понимаю, неужели все эти массивы применяют при разработке софта? какой код не посмотрю, там просто методы друг дёргают и либы всякие
>>2631489 Попробуй парсер для .bmp написать и через условный OpenGL на экран картинку вывести. Вот и узнаешь зачем динамические массивы нужны.
>>2631028 ??? После выделения памяти под двумерный массив в куче через calloc/malloc, ты можешь к элементам массива через A[j] обращаться(если ты массив массивов создаешь). Если по каким-то причинам тебя не устраивает массив массивов, то можно двумерный массив в одномерный запихнуть, тогда и будешь с голыми указвтелями ебаться.
Привет аноны. Можете пожалуйста объяснить, какие опции передаются параметру -Wl,... через запятую, его использует линковщик на этапе сборки, и как я понимаю его также нужно использовать для того чтобы указать путь до импорта динамической библиотеки, помимо параметра -L.
-Wl,<options> Pass comma-separated <options> on to the linker.
Как вообще правильно слинковать свою программу с динамической библиотекой в Windows, используя gcc ?
А всё, я туплю. -Wl это параметр для дополнительных опций линковщика, как например поиск нужной dll для работы программы. Тогда возникает другой вопрос, как правильно указать в опции -Wl путь для поиска динамических библиотек ?
>>2632424 Ну посмотреть что там в файле, изучить формат. У всех аудиоформатов (тут к гадалке не ходи) будет какой-то единый интерфейс, типа время @ частота @ громкость Ну и дальше понятно
Когда-то был сайт, где можно было вбить сложный сишный код с указателями, и тебе их расшифровывало - где указатель, а где дереференсинг указателя, и т.д.
>>2634716 Скачай интерпритатор или компилятор, на чем ты там кодишь, хотя судя по тому, что в треде про Си, то компилятор. Скачай MinGW, если на Винде, или gcc, если на Linux, там это через терминал можно сделать
>>2634736 >>2634738 Я вроде по русски спросил про Эклипс? Зачем вы меня грузите? Я купил на торрентах DS-5 от самого ARM, только не разберусь как настроить по определенный камень.
>>2634790 Как нахуй разница, если все на ассемблер переводится, а ассемблер на язык машинных команд?inb4: да знаю я, что есть разные версии ассемблера, не души, ты понял, что имел в виду
>>2634835 >Если не можешь осилить текстовый редактор Ты совсем дурачок? Причем тут текстовый редактор, если мне нужно компилить код под определенный контроллер?
>>2635269 Я, видимо, слишком тупой для такого, половину строк в твоем коде вообще не понимаю. Че такое, например, intstrlen()? Что возвращает strlen без параметров и почему ты хочешь этим назвать переменную?
>>2635271 Это функция "донор", "объявлять" её требуется, чтобы можно было заиметь на неё указатель. Именно её мы будем дергать путём подсовывания в другую функцию указателя на неё. Mastering C Pointers, Traister >Pointers to Functions A C language function is not a variable, but you can declare pointers to functions that can be used in a m a n n e r that other pointers are used, such as placing them in arrays, or passed to other func- tions. One doesn't see a lot of use of pointers to functions, but this technique can sometimes be used to advantage. One common usage of pointers to a function is in purposely hiding the intent of a program. Pointers to functions serve to hide the n a m e and source code of that function. Muddying the waters is not a normal routine in C programming, but with the security placed on software these days, there is an element of misdirection that seems to be growing. The following program demonstrates the basic technique of de- claring a pointer to a function:
This process may look a little ridiculous, and maybe it is, but it does effectively demonstrate a pointer to a function. In this case, the function in question is strlen(), which returns the length of a string argument. Notice that strlen() is declared as a p a r t of the calling program. This is a necessity, even though the function is a p a r t of the linked library code. Within the calling program, another function is invoked. ScarpO, arbitrarily named, passes two values. The first is the char array, which now contains "COMPUTER". The second is the n a m e
of the strlenO function, proper. In this usage, s t r l e n without parentheses is the address of the strlen() function. Within scarp(), the address of a is given to c h a r ЗВЕЗДОЧКА c , and the address of s t r l e n is passed on to a pointer to this function ar- bitrarily named g i r l . Note the declaration of this entity within the function. The expression: i n t ( ЗВЕЗДОЧКА g i r 1 ) ( ) says that g i r l is a pointer to a function that returns an int value. At this juncture, the expression (ЗВЕЗДОЧКА g i r 1 ) may be used exactly as you would strlen(). In the function: r e t u r n ( ( ЗВЕЗДОЧКА g i r l ) ( c ) ) ; means exactly the same thing as: r e t u r n ( 5 t r l e n ( c ) ) ; ЗВЕЗДОЧКА ( g i r 1 ) ( ) points to the storage address set aside for strlenQ when it is declared in the program
>>2634711 В эклипсе особо и настраивать ниче не надо. Скачиваешь тулчейн ARM Cross GCC для компиляции, openOCD для отладки. При создании проекта в окошках подтягиваешь всё это дело и кодишь.
>>2635273 Это называется K&R синтакс, и его в ближайшие годы отменят. Раньше компы были слабее поэтому позволялось вместо int foo(int x, char☆ c) { ... } Писать int foo() int x char☆ c { ... } Переписал твой пример по современному. И не забывай переключить язык на C в годболте, если там C++ выставляется сам.
>>2635449 Не пон, но ведь в первом примере вызов функции с аргументами, а во втором вызов функции без аргументов. Это же не одинаковые записи. Всм в стек-то может оно всё запишется при вызове, но функционал-то разный.
Есть вызов scarp с аргументами: 1) строка a, 2) адрес функции strlen (тут strlen не вызывается) Внутри scarp вызывается по указателю переданная функция, в данном случае strlen, c аргументом c (куда была передана строка a)
>>2635476 А не вызывается он, потому что нет скобок scarp(a, strlen) Сравни с scarp(a, strlen()) - вот это было бы без аргументов, но это ошибка компиляции, потому что strlen требует аргумент some_other_func(s, strlen(s)) - тут бы ты взывал some_other_func(char* str, int len)
>>2635476 Если же ты про то, что в старой книге написано main() { int strlen(), x; } То это не вызов функции, а ее объявление в стиле K&R Иными словами,в той программе не делают #include, Но объявляют что функция strlen существует Потом ее во время линковки прилепляют из стдлиб или где она там живет.
>>2635449 Всё равно не пашет.... В отличие от pythontutor где на том же девятом GCC с теми же флагами всё работает.
>переписал Блин, ты бы лучше ссылку кинул. Ладно, сейчас перепечатаю, посмотрю, взлетит ли. В любом случае вопрос по Pythontutor остаётся. https://pythontutor.com/visualize.html#code=main%20%28%29%0A%7B%0Aint%20strlen%28%29,%20x%3B%0Achar%20a%5B10%5D%3B%0Astrcpy%28a,%22COMPUTER%22%29%3B%0Ax%20%3D%20scarp%28a,strlen%29%3B%0Aprintf%28%22%25d%5Cn%22,%20x%29%3B%0A%7D%0Aint%20scarp%28c,girl%29%0Achar%20c%3B%0Aint%20%28girl%29%28%20%29%3B%0A%7B%0Areturn%28%28*girl%29%28c%29%29%3B%0A%7D&cumulative=false&curInstr=8&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=c_gcc9.3.0&rawInputLstJSON=%5B%5D&textReferences=false
>>2635449 >Это называется K&R синтакс, и его в ближайшие годы отменят. c чего его должны отменить? новые стандарты по идее должны сохранять обратную совместимость
>>2635617 Поясняю - объявлять int strlen() не нужно сейчас, потому что ты его и так инклюдишь. А если объявляешь, теперь тип возвращаемого значения size_t, а не int, о чем компилятор ругается.
>>2635866 Не пахало, т.к. я проебал звездочку одну у c. Странно, что ты не заметил. Вот исправленная версия, пашет как миленькая. https://godbolt.org/z/3v7qdYj34
>>2635923 Указатель на указатель - это, например, массив массивов. Или последующий элемент в связном списке. В обоих случаях он может указывать никуда.
>>2636066 Так стопэ ты сейчас про что? Если про *void - то это просто тип any (любой). Например, malloc тебе возвращает память, а ты там уже можешь хоть структуру, хоть массив интов, хоть строку чаров разместить. Если же про указатель на NULL, то это традиционно последний или пустой элемент. Например в связном списке. A -> B -> C -> NULL. У последнего элемента C нет следующего.
>>2625890 >>2625427 Так, пажите. Я пишу под ESP32, у меня там stack на 8кб, и heap на 300кб. Если я буду делать malloc() для каждой динамической временной строки, у меня heap фрагментируется и всё перестанет работать. А в stack место просто очистится после выхода из функции и всё.
Вот пикрелейтед. Тут 2 строки создаётся, одна для передачи в функцию для отправки её по сети, другая для передачи в debug() который и в консоль напишет и сохранит для дебага. Я правильно делаю, что тут не выделяю память для этих двух строк через malloc() в heap, а выделяю в stack?
>>2638500 >Я пишу под ESP32, у меня там stack на 8кб >Если я буду делать malloc() На микрухах надо просто заранее выделять массивы нужного размера. Статичные.
>>2638501 У меня появилась гениальная идея. Что если я на старте сделаю malloc() в 2кб, а потом функцией str_write() напиример буду добавлять пришедшие char* в эту область памяти. А функцией str_get() ставить в конец нуллбайт и возвращать указатель на нулевой символ. Так я могу работать с строками вообще не занимая никакой лишней памяти. Гениально? Главное не делать паузы между вызовами, чтоб 2 разных кода в одну память не писали по очереди.
А я напоминаю всем, кто хочет научиться профессионально программировать в среде Windows, особенно это касается системных программистов. Книги Джеффри Рихтера лучшие в этой области, мне кажется он знает архитектуру Windows лучше чем сами создатели Windows.
>>2639031 Вот жеж пидор. Наебал. Я проверил, размер heap уменьшается, когда я увеличиваю размер массива в начале файла. Он не в стек попадает, а в heap.
>>2639029 А если я в начале файла int объявляю, она тоже будет в хипе?
>>2639021 >Интересно, как ему разрешили ее издать. Это же явно реверсинг + слив коммерческой тайны.
Я пока что не нашёл чего-то "закрытого" в его книгах, как раз таки всю эту информацию можно найти в документации Майков, просто автор преподносит её в очень информативном и приятном для познавания виде, совмещая этот процесс с практикой.
Напоследок добавлю >>2639001, очень хорошо сочетается с книгой Павла Йосифовича "Работа с ядром Windows", материал в книге изложен очень кратко и понятно.
>>2639700 >Ну хватит плез Блядь, ты заебал со своим линуксом. Чтобы ты понимал, не все пишут под linux, я в прошлом треде общался с тобой, и как выяснилось ты ни имел и не имеешь дела с этой платформой, но постоянно яростно её обсираешь, а потом выясняется что ты пишешь под linux код для каких-то микроконтроллеров. Перестань обсирать вещи, только потому что ты их не понимаешь, либо не имел с ними дело.
Без WinApi в среде Windows ты не напишешь ничего значимого и безопасного кроме "hello world" с использованием стандартных библиотек, функций и структур, и да, я говорю именно про современные операционные системы, а не про то что ты там мог писать в 90-х (в зависимости от твоего возраста). Вообще для того чтобы что-то стоящее писать, нужно даже не сам Си знать, важнее знать архитектуру ОС под которую ты пишешь, её API и железо под которое ведется разработка (если нужно), а сам Си при желании меньше чем за неделю изучить, знание только одного Си не принесет вообще никакого профита, кроме самовнушения о том что ты познал системное программирование, даже нормальную консольную утилиту не напишешь, скорее кал который будет держаться на соплях и содержать в себе множество уязвимостей.
Люди не читают книги, а потом пишут всякую хуйню и костыльные библиотеки, а всё потому что лишний раз поленились заглянуть в документацию или литературу, и найти уже готовое решение.
>>2639869 >Без WinApi в среде Windows ты не напишешь ничего значимого и безопасного кроме "hello world" Верно. >и да, я говорю именно про современные операционные системы, а не про то что ты там мог писать в 90-х Чего, простите, лол? Ты бредишь. Я еще в 80х писал сначала на нормальном фиксированном компьютере с использованием железа естественно, там всё необходимое было из коробки, как аппаратура, так и программная поддержка. А потом в начале 90-х попробовал этот ПК-конструктор с Си и сразу же выяснил, что это тыква, в Си на ПК ничего нет, т.к. сама архитектура ПК - ни о чем, железо может быть какое угодно, а значит никакое. Там на голом Си никогда и нельзя было ничего написать кроме хеллоуворлда в калсольку, позорище которые было дичайшим зашкваром даже в 80-х, это даже не программирование вообще, а чистая алгоритмика в вакууме, теоретическая хуета.
>>2639949 Нахуя меня репоаишь тогда? Тебя гринтекст так триггерит? Пиши дальше под свою проприетарную парашу да насасывай корпам, нахуя сюда-то лезешь тварь.
>>2639953 Согласен, я бы тоже линуксоидов нахуй послал, но всё же линукс имеет применение в виде WSL, чтобы пердольные компиляторы запускать если вдруг понадобится, иногда случается.
>>2640078 Я понимаю, что 2023 синоним корпорабства, но всё же давайте не поддаваться на общие тренды когда они явно ведут в жопу. Имейте мужество твердо сказать "нет" линуксу, а уж про макос и напоминать стыдно.
Есть массив из структур, в каждой струткуре по 5 чисел, условно: m.a, m.b, m.c, m.d, m.e. Надо сложить все переменные структур друг с другом: m.a + m[i + 1].a, m.b + m[i + 1].b и так дальше. Можно ли это как-то автоматизировать, а не писать для каждой переменной стуктуры отдельное действие?
>>2640301 Да, какие проблемы? Открываешь свою структуру в дебагере, смотришть оффсеты каждого поля, если они одинаковые пишешь цикл увеличивающий указатель на нужное значение, так чтобы он каждый раз указавал на следующее поле, и суммируешь значения по указателю.
>>2640782 А если неодинаковые, в структуру можно добавить массив с набором размеров, и по нему увеличивать указатель. Или держать отдельный массив, чтобы каждую структуру не раздувать одинаковыми данными. Ах, да, если типы получаются разные, тогда в массиве надо еще хранить некие идентификаторы типов, и при суммировании проверять каждый тип и использовать соответствующий указатель.
Подскажите, я в отчаянье. Пишу под чип ESP32, написал макрос, который вставлен в функцию, которая отправляет ответ на запрос в вебсервер. У меня сломалась математика. >int records_count_##name >int record_item_i >records_count = 10 из макроса Как 10-1=1061159396 рандомно? Даже если я где-то насрал в память не по адресу, как это сломало математику?
>>2643750 Лень разбираться, проверь snprintf, почитай что она принимает и возвращает. Может ли быть, что буферу не хватает одного символа на \0 и ты видишь мусор, который идет сразу за ней? Так же, ты просто прибавляешь возвращенное значение, но в случае ошибки она возвращает отрицательные. В общем, мое паучье чутье подсказывает что странно кодга в printf-функциях не видно где-то +1 для \0.
>>2643838 >>2643750 Мне помогли разобраться. Произошла интересная штука. record_item_i была объявлена в loop() на стеке и потом передана в функцию, которая вызывается коллбеком много раз. Но сам loop() выполняется и сразу выходит и переменная удаляется. И у меня в коллбеке остаётся ссылка на какую-то рандомную память на стеке. Сделал static int record_item_i и всё заработало. Такие дела.
>>2599695 (OP) Где почитать про используемые либы и подходы для concurrency/asynchronous programming? Задача максимально утилизировать ядро процессора.
>>2647027 >Книга устарела. В книге дают основы, я параллельно вместе с книгой использую техническую документацию Microsoft, а вообще я смотрю информацию в нескольких книгах, мне ещё нравится "Внутреннее устройство Windows" Русиновича (7-е издание).
>>2647027 >Уже наворотили разных api. Что значит разных, я говорю конкретно про WinAPI.
>>2599695 (OP) Где смотрите вакансии? Как искать на HH? По языку искать невозможно, потому что однобуквенное название. Какая вообще работа есть для программиста на Си, что пишут на Си в РФ?
>>2647779 Ещё есть всякие телеграмм каналы, либо через знакомых, общение в чатах с теми кто уже работает в каких-то компаниях. Но как ты понимаешь, одного только Си недостаточно.
>>2650658 > си не достаточно Я к тому что ты как минимум должен понимать, архитектуру операционных систем, устройство памяти, как между собой работают пользовательский режим и режим ядра, как их используют потоки, объекты ядра, службы (демоны в linux) и прочие базовые вещи, ну и конечно же уметь работать с отладчиками, и иметь некоторые навыки программирования на ассемблере, опять же для отладки, поиска проблем используют дизассемблирование, реверс-инжиниринг, либо же иногда для оптимизации кода, его скорости используют ассемблерные вставки, особенно при программировании ядра (написании драйверов).
Да и ты сам можешь открыть любую вакансию, посмотреть какие там требования, ещё есть всякие роадмапы. Знание одного только языка программирования в любой сфере недостаточно, это касается не только Си.
Анончики, есть какие-то книжки по встраиваемым системам? Чтобы понять как что делать с UART, SPI, I2C и прочее? Пока только смог ручками потыкать в платке, и настроить кое как UART, но это вышло через боль и явные блуждания без понятия чего я ищу.
Вообщем есть какой-то организованный подход к микроконтроллерам, встраиваемым системам и прочему?
>>2656438 Тебе обязательно всю структуру забивать заголовком? Возьми только нужные тебе значения по индексам и всё. Давно работал с вав, но когда работал (выводил выборки на ЦАП) брал из заголовка только размер и частоту выборки, насколько я помню.
>>2656438 В чем суть вопроса? Можешь просто ручками читать следующие N байт и присваивать. header.chunkID[0] = bytes[0]; header.chunkID[1] = bytes[1]; header.chunkID[2] = bytes[2]; header.chunkID[3] = bytes[3]; header.ChunkSize = bytes[4] + (bytes[5] << 8) + (bytes[6] << 16) + (bytes[7] << 24); Понятно что это говнокод и все это можно автоматизировать/украсить написав красиывые функции которые будут увеличивать указатель текущей позиции, как будто из файла читаешь: header.ChunkSize = readNextInt();
Можно наверное и просто memcpy сделать, но надо чтобы струтура точно совпадала, без всяких паддингов между элементами. Например в gcc это включается __attribute__((packed))
Есть готовые либы (не уверен что именно для Си, но для С++ и раста точно есть), которые умеют читать структуры по их описанию. Но для тебя это будет оверкилл.
Уже задавал вопрос год назад, задам ещё раз тут, хоть тред и умер
Выучил самые основы языка Си, делаю задачи на codewars, дошел до 7 уровня, начал сегодня. Пока интересна книга Андре Ламот Программирование игр под Windows, хочу учить ассемблер
Как мне повысить свои навыки в Си, чтобы не быть обезьяной с гранатой?
>>2660121 Ну, это понятно, просто интересно, никаких поисков не производил, а какой язык безопасный? Только какой-нибудь высокоуровневый по типу Java, Kotlin или Python?
>>2660121 Просто ещё читал какую-то статью и там писали, что раньше Си был совершенно другим, был ближе к языку Ассемблера, к машинным командам, а начиная с какого-то стандарта стал считай, что высокоуровневым и медленным
>>2660121 Помню, когда на первом курсе учился был удивлен, что в Си раньше не было цикла for, только while, поэтому может и в правду быстрый был только старый Си, а нынче и Питон Си обгонет
>>2660938 не слушай додиков, расту несколько и на нем пишут трапы. смысла раста чтонибудь переписать, ничего своего не сделали. а на си держится весь костяк.
>>2661176 Сап, аноны, тупой как пробка. Если запросил памяти из кучи и забыл ее освободить до какой поры она будет недоступна? До тех пор процесс, в котором был запрошен этот самый кусок памяти в куче, не завершится или пока ты не перезагрузишь ПК, чтобы RAM очистилась?
>>2661517 Ну, я плюс-минс понимаю, что выделения памяти через API происходит
Извини, не совсем тебя понял
Имел в виду, вот условно я выделил 100 Мегабайт памяти для своего процесса, пусть это будет чисто .exe, и забыл освободить, что будет дальше? Память сама освободится после завершения процесса или придется перегрузить ПК, чтобы состояние RAM обнулилось
Всякие Линуксы, винды и маки и прочие десктопные ОС родом с 90-х и даже 80-х годов очистят эту память как только закончится твой процесс, а может даже раньше.
А вот если у тебя уже более древняя ОС или ОС для всяких микроконтроллеров/платок, то там уже смотреть надо
Ребут устройства практически точно освободит тебе память, если только какой-нибудь шиз не придумает при ребуте восстанавливать состояние системы до ее ухода.
А вот, если в какой-нибудь функции будет выделена память?
Например так:
#include <stdlib.h>
void foo { void* p = malloc(100000); }
int main(){
foo();
return 0; }
Вроде как, указатель на область памяти размером 100к байт будет занят, и освободится в описанных тобой условиях
Но есть ли вероятность, что память для p будет освобождена при завершении работы функции? Или условно какой-нибудь оптимизирующий компилятор, где увидит, что указатель не глобальный, не static, не external и сам вызовет вызов функции free()? И если такой есть, так будет освобождаться память под матрицы и тензоры всякие?
Как протестировать функцию которая содержит стандартный ввод ? Мне уже подсказали что нужно как то использовать std::istream но я блять нихуя не могу нагуглить.
>>2662739 Ну, хз, вроде стандартный ввод в C это stdin, как тебе выше ответили, для ввода данных с клавиатуры используется scanf(), ну, или на крайняк попробуй функцию fscanf()
создаем две переменные - c и pred, даем последнему значение 0.
пока си получает значение не равное eof выполняем{ если си == пробел если пред == 0 достаем значение си, а пред делаем равным 1 если си не равен пробелу достаем значение си и делаем пред равным нулю }
но надо же посчитать подряд стоящие пробелы и если их несколько заменить на один, какого хуя во вложенном ифе идет подсчет только первого? как заменяются несколько пробелов на один? как вообще комп понимает что пробел не один подряд? разве не должен быть счетчик считающий все пробелы и потом каким то хуем заменяющий все n-ые пробелы одним?
в общем я ничего не понимаю, кусок кода будто бы убрали отсюда, но это ведь работает!
это код с книги Кернигана и Ричи "Язык программирования С", если что.
>>2663547 Если был введен пробел{ Если пробела был до этого не было{ Печатаем пробел Запоминаем, что пробел был pred = 1 Если дальше будет пробел, то пробел напечатан не будет } } Если с клавиатуры ввели не пробел, то{ Печатаем символ Обнуляем переменную, которая отвечала за то -- был ли введён пробел }
>>2663547 Тебе не нужно считать пробелы. Тебе нужен только факт - был предыдущий пробелом, или не был, когда тебе встретился пробел. Все остальное сводится к этим случаям.
>>2662077 Ебать, это чё за компилятор такой, что вызовы функций сам регулирует? Или я отстал от жизни, какие это хоть флаги примерно? >>2665634 Всм, причём тут оптимизация? Ты просто выделяшь в heap память, но при этом теряешь указатель, и логично, что у тебя будет или нихуя не выделенно (null) или выделена память, напечатан на неё указатель и сразу проёбан
>>2665757 > Ебать, это чё за компилятор такой, что вызовы функций сам регулирует? Или я отстал от жизни, какие это хоть флаги примерно? Банальный clang -O. Еще может malloc + memset заменить на calloc, а printf на puts. > Всм, причём тут оптимизация? При том, что она выкинет весь цикл.
Аноны! Я новичок в си. Мне нужно скомпилировать программу указав в ключах -lncurses. Как можно прописать ключи компиляции в XCode? Если вообще можно...
На codeWars рейтинг 4 kyu, то бишь могу какие-никакие алгоритмы нищие писать, более менее как в памяти располагаются байты знаю(все алгоритмы писал на Си). Что посоветуете почитать вдовесок, чтобы взяли на работу, ибо боюсь, что отчислят из ВУЗа, а как жить дальше не знаю, а хотелось бы реализоваться в IT-сфере?
Как получить данные из TLS в библиотеке pthread без использования глобальных переменных ? get/set_specific не канает , для этого нужен глобальный ключ. Создать глобальную static thread_local тоже нельзя. Функция должна вытягивать id из тлс , которы был туда положен в другой части кода .
>>2679224 Pthread это и есть айди потока. Футкция птреад_селф. А вообще можно сделать стракт {птреад, лонг айди} и передавать в функцию этого же треда и брать готовый айди, если тебе таое значение нужно, а не тид.
>>2679322 Да , я знаю. Просто задание звучит "Реализовать свою функцию". А как получить переданную струтуру ? Я так и делаю , просто функция гет тид, сигнатуру которой нельзя менять, вызывается уже внутри функции в которую передана структура через pthread_create.
Можно как-то наебать GCC-подобный компилятор и передать в функцию, принимающую указатель на void для работы с адресом выделенной памяти, реальное значение?
>>2692005 Нет так врятли сработает. Оно ждкт указатель, тоесть это то что тр должно существовать вне функции в момент ее вызова. Да и какой в этом смысл?
Всем привет. Встала цель написать декомпрессор на си, открыл книгу по сжатиям и архиваторам и сразу сел в лужу(см.пик). Какие разделы математики надо знать, чтобы понимать написанное? Я просто не понимаю от куда берется формула, даже с некоторыми объяснениями. Математикой никогда не занимался серьёзнее квадратных примеров и анализом графиков на парах.
>>2692675 Привет. Книга называется "Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео" Д.Ватолин, А.Ратушняк, М.Смирнов, В.Юкин. 2003 год
Парни, а можете подсказать про работу switch/case на уровне асма?
Пик-1: Состояние регистров после проверки условия в switch, и перед началом расчёта адреса инструкции, на которую надо прыгнуть по условию, которое сформировано в switch.
Пик-2: Состояние регистров после того инструкций (красными чёрточками показываю какие регистры изменились):
lea rdx, [rax*4]
как я понимаю в rdx записалось значение, на которое нужно будет увеличивать указатель, который записывается в rax следующей инструкцией
lea rax, [rel 0x560c7280f078]
т.к. переменные у меня типа int, а в условии switch значение равное 11-ти, то в rdx записывается значение 44, типа указатель нужно будет увеличить на 44.
Пока всё ясно, типа, как подсказал мне гугол, что при компиляции gcc создаёт таблицу с адресами, в которые записываются условия из switch/case.
Пик-3: Уже начинаются непонятки!! Как получается это значение, которое в регистре rax? Понятно, что мы в eax записываем то, что хранится по адрессу 0x560c7280f078 + значение 44, которое у нас находится в rdx, а потом знак регистра eax расширяем до rax. Но, когда я на калькуляторе байтоёблю, т.е. к адресу 560C 7280 F078 прибавляю 44, то получаю 560C 7280 F0A4, что совсем не похоже на ffff f3a1.
Пик-4: А тут вообще какая-то магия происходит!! Непонятное для меня значение прибавили к 0x560c7280f078, а потом прыгнули как раз туда куда нужно.
Аноны, помогите, пожалуйста!! Объясните логику происходящего!! Или подскажите куда копать? Что это за таблица с адресами к switch/case? Каким образом gcc адреса формирует в этой таблице?
>>2711809 >Пик-3: >Уже начинаются непонятки!! Как получается это значение, которое в регистре rax? Понятно, что мы в eax записываем то, что хранится по адрессу 0x560c7280f078 + значение 44, которое у нас находится в rdx, а потом знак регистра eax расширяем до rax. Но, когда я на калькуляторе байтоёблю, т.е. к адресу 560C 7280 F078 прибавляю 44, то получаю 560C 7280 F0A4, что совсем не похоже на ffff f3a1.
Тут я довтыкал, аноны!! Типа: мы к указателю прибавили 44 и взяли то, что хранится по этому адресу.
Но теперь другой вопрос, а что тогда хранится по этому адресу? Как это вообще можно посмотреть?
>>2712797 >замаскированный goto Анон, я понимаю, что мы прыгаем на определённый адрес по определённому условию, я не понимаю, как мы получаем этот адрес?
>>2713014 > я не понимаю, как мы получаем этот адрес? он известен на этапе компиляции, вроде как это адрес относительно самого файла, но это не точно мимо
>>2713056 >он известен на этапе компиляции Ну да, компилятор создаёт таблицу с адресами инструкций, которые соответствуют определённому условию.
Мне вот этот момент непонятен: типа, мы взяли адрес начала таблицы (не знаю, наверное, это не точно, потому что я не допираю для чего мы используем значение и что это за значение, которое у нас в регистре rax на пике-1) 0x560c7280f078, прибавили к нему 44 и получили то, что в регистре rax. Т.е. у нас есть указатель, который указывает на начало таблицы, к нему мы прибавляем 44 и получаем другой адрес, из которого мы берём значение и заносим его в eax, потом мы знак этого значения расширяем до rax, после чего значение fffffffffffff3a1 прибавляем к адресу (как мне кажется начала таблицы) 0x560c7280f078, после чего получаем конечное значение, которое у нас в rax на пике-2, по которому и прыгаем.
Но нахуя мы прибавляем два разных значения к одному и тому же адресу, это, во-первых? Во-вторых, что значат тогда 44 и fffffffffffff3a1?
Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Что еще почитать:
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлый: