24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный 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 помогает читать сложные сишные декларации. Этот тред копия 01/08/19 Чтв 23:34:41 №1446278 с вебархива №47 Прошлые треды: предыдущий тонет тут: https://2ch.hk/pr/res/2493863.html https://arhivach.ng/
считает то норм, но время работы рассчитывается пиздец странно - по смыслу это время работы самого длительного процесса, но почему то на 1 процессе оно быстрее чем на 4, а на 4 быстрее чем на 16 потому что говнокод
>>2499275 По идее нужно было прост написать параллельную MPI-программу для интегрирования методом Монте-Карло, которая принимает аргументом точность и генерирует точки до тех пор, пока численный ответ не приблизится к аналитическому.
Если бы не задание, тут и параллелить не было бы смысла. Кажется что накладных расходов на организацию параллелизма больше чем выгоды но скорее всего это потому что говнокод
Битовый сдвиг вправо для знаковых целых implementation defined. Как написать кроссплатформанный код для получения 4 старших бит из char, с учётом того что он может быть как знаковым, так и беззнаковым, не нарушая штандарт? допустим char всегда 8 бит
>>2501156 >Битовый сдвиг вправо для знаковых целых implementation defined. Странно, в крестах в стандарте закреплено что для знаковых арифметический, для без - логический.
>>2501367 > потому что битовое представление знака ID. C99 6.2.6.2 the sign bit is one, the value shall be modified in one of the following ways: — the corresponding value with sign bit 0 is negated (sign and magnitude); — the sign bit has the value −(2N) (two’s complement); — the sign bit has the value −(2N − 1) (one’s complement). Which of these applies is implementation-defined, as is whether the value with sign bit 1 and all value bits zero (for the first two), or with sign bit and all value bits 1 (for one’s complement), is a trap representation or a normal value. In the case of sign and magnitude and one’s complement, if this representation is a normal value it is called a negative zero.
>>2501762 fflush(), если всё ок вернёт 0. Если нет, то он вернёт константу EOF и запишет в специальную глобальную переменную errno код ошибки. Коды ошибок у fflush() в общем те же, что и у системного вызова write(). Ну там уж гугли, какие они бывают. Короче далее проверяешь, что errno равен такому-то коду и делаешь уже то, что нужно в случае ошибки
Чтот я раздуплить не могу, что такое /dev/input/event* ? Это просто отладочная какая то штука или через нее реально драйвера для нажатий на клавишы пишут?
Что это? Что это к нам ползёт? Что это за омерзительный старый дед, воняющий мочой? Почему вместо штанов у него плотно сбитое подсушенное говно? Что за жёлтые гнойные слюни текут из беззубого рта?
Это, дети, сишкоблядь. Посмотрине на него внимательно. Посмотрите. Видите, как трясутся руки у полудохлого пердеда? Какие мозоли натёрты на кончиках стариковских пальцев? Видите, как согнута за бесконечными отловами use-after-free и stack overflow его тощая сутулая спина? Что шамкает этот старый хуеплёт? Что он пытается пробулькать своей омерзительной дырой на жопной роже?
--- Пфркхтпф сишка тру, - пёрнул старый хуесос, - Пфсишка пф лучший езык.
Видите, дети, как это омерзительно? Как мерзко выглядит этот выкинутый на свалку IT бывший специалист? Видите, как вываливается его геморроидальная кишка и на пол капают гнойные капельки ANSI C? Видите, как канатом вываливается пучок template-глистов? Как из поганой пасти старпёра вместе с кровавой блевотой вываливаются сегфолты и статичкеские типы? Видно ли вам, дети, как дурнопахнущие шаблоны кровавыми коростами отваливаются от костлявой жопы сишкоблядка, исполосованной пролежнями и целлюлитом?
Сишковыблядок - не человек. Это ебучий якорь мира IT, это сраная кодла говняных мух, которые только и умеют, что жрать говно и паразитировать на нём. Эти ебучие гигабайты сраного сишного кода, который надо обмазывать сотней анализаторов, чтобы отловить очередной глюк, высранный пиздорылой полудохлой шлюхой программистского сообщества. Сишкоблядство настолько глубого въедается в подкорку межушной пустоты дегенерата, что я могу определить сишкоблядь одним только взглядом. Они всегда нищие, потому что за патчики в швабодное ПО никто не платит, а современное ПО на Сишке это ебаное легаси, которое продаётся только по большим празникам. У них вседа круги под мутными глазёнками, потому что всю ночь они отлавливали место, где обращение к элементу массива крашится из-за того, что мудила не выделил в нужном месте память. У них всегда вздыбленные на жопе обдроченные брюки, и вовсе не от того, что дед опять обосрался, а из-за огромной геморроидальной грозди. И штаны обтруханы не из-за дрочева на баб, а из-за дрочки на славные 80-е, с их ебучими бобинами, перфокартами и иконкой сишкобляди - дискеточками.
Я презираю сишкоблядь. Если ты сишкоблядь, то пизданись своей закостенелой в непоколебимом апломбе старого дегенерата бошкой и освободи мир от своего присутствия. Никогда не садись рядом с нормальными людьми и не заговаривай с ними - ты сишкоблядь, недочеловек. кусок старого гнилого мяса. Иди на хуй. Вы превратили софт в ебаную кучу говна, которую проще переписать, чем доработать ваши высеры. Вы умудрились принести в 21-ый век то, что должно было загнуться в начале 90-х. Вы умудряетесь дышать, когда вам бы пора уже и к земельке привыкать.
День, когда сдохнет последний кодосёр на Сишке, станет праздником человечества.
Ковыряю графическую панель по работе. Опытные господа, свангуйте что может быть не так.
Мне надо реализовать возможность "дельты" для параметра (сумма или разность с текущим измеренным значением) в макросе (так обзывается оболочка, в которой исполняется пользовательский код на Си).
Измеренное значение отображается в дисплее с типом DWord и форматом Float.
// в промежуточную переменную типа Float (tmp_val) заносим сумму или разность считанного значения типа DWord (temp_value) и дельты delta типа Int (в зависимости от знака дельты) // Здесь же преобразуем DWord (temp_value) в Float tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta -1)); // заносим значение промежуточной переменной tmp_val в регистр, например, PSW300 (+ 301) - который и отображается в дисплее с типом DWord и форматом Float (float)(PSW+300) = tmp_val; , где: delta - переменная типа Int, которая хранит собственно дельту; tmp_val - переменная типа float, которая хранит промежуточное значение для вычислений; temp_value - переменная типа DWord, которая хранит считанный с преобразователя параметр;
С положительной дельтой всё в порядке, а если дельта имеет знак минус - происходит переполнение что ли: на дисплее отображается 6.86+05. Типа того.
В чём проблема? Предположил, что по каким-то причинам косяк в арифметических действиях между целочисленными и вещественными типами (Inи Float). Пробовал привести типы к одному, явно и не явно: (float)delta; float tmp_delta = delta; Даже так попробовал: tmp_val = (delta >= 0) ? (DWord_2_Float(temp_value) + delta) : (DWord_2_Float(temp_value) - (delta -1.0)); По идее, компилятор должен автоматом привести к типу Float.
Пробовал и замену суммы, на разность (для того и умножал на -1) - не помогает. Типа, 10 - 3 = 7; 10 + (-3) = 7; 10 - (-3 * -1) = 7;
Что может быть не так? Почему с положительной дельтой всё нормально, а с отрицательной проиходит непонятная хрень?
>>2504540 Аппаратчик, я узнал тебя по говнокоду. Почему ты пытаешься программировать - кабаныч не выделил вакуху разраба? А уборщица у вас отдельная есть?
>>2504532 Ебани sizeof(тип) по всем используемым типам на своем конпеляторе и сравни с типами из спеки панели >Проверял код в эмуляторе Си Там может 64 битный быть конпелятор, а тебе какой нить 16-32 нужен
кто может без окунания в говно пояснить поподробнее, что сделать чтобы их увидеть? я вроде попытался поставить пакеты debuginfo (конкретно 389-ds-base-debuginfo и 389-ds-base-lib-debuginfo), но ничего не завелось.
>>2507182 Надо смотреть как собран этот ldap-сервер. У тебя по ссылке написано что оно не будет работать если программулина собрана с -fomit-frame-pointers, что очень вероятно, так как GCC включает эту опцию на O1 и выше.
Дело было в приведении типов: элемент Ввод данных для переменной дельты имеет тип Word и формат Dec. Переменная, хранящая дельту, имеет тип Int. Решилось всё с помощью преобразования Word_2_Int16(x). Далее тип Float и Int можно нормально складывать и вычитать.
>>2507283 >>2507197 да, спасибо ребзи. там все немного сложнее, и эта залупа работает в контейнере как часть freeipa сервера. так что там совсем уж просто так не получиться скачать сорцы из репы и пересобрать. но будем пробовать. потом напишу в резюме что хуяк хуяк и sre
подскажите книжек или сайтов где qt creator объясняется для даунов. я гречневый васян, никуда не вкатываюсь, хочу сделать программку которая копирует функционал будильника из аимпа3.
и мне надо чтобы при нажатии кнопки запускался цикл, который смотрит текущее время на компе и сравнивает его с тем временем которое я указал как время когда меня надо будить. как доставать время из компа и преобразовывать его в строку я нагуглил. написать цикл который каждую секунду будет сравнивать строчку получившуюся из времени и строчку из спинбокса пикрил я скорее всего тоже смогу. я так же нагуглил как вписывать данные в формы, поэтому мой будильничек уже умеет проигрывать любой файл который я выбираю.
но я не понимаю как доставать время из спинбокса и я не могу нагуглить ни на стеке ни где-то ещё как это делается на крестах. пожалуйста подскажите кто знает как доставать данные из формочек этих.
ситуация осложняется тем что почти всё что я могу нагуглить про кресты - это какие-то древние кресты, например в примерах постоянно упоминают string, а тут надо писать QString и прочие подобные расхождения.
и ещё - вот на скриншоте то что у меня сейчас есть. почему тут несколько файлов? если я объявляю переменную в main.cpp то я не могу использовать её в mainwindow.cpp но если я объявляю её и там и там то программа не компилится потому что надо объявлять в каком-то одном файле. можно ли как-то объявить переменную в одном файле а использовать во всех?
>>2508456 >можно ли как-то объявить переменную в одном файле а использовать во всех? Можно, ебани в хедер >то какие-то древние кресты, например в примерах постоянно упоминают string, а тут надо писать QString и прочие подобные расхождения. Это не кресты, это КюТешные типы и там еще много чего специфичного. >подскажите книжек или сайтов где qt creator объясняется для даунов У них охуенные доки, читай их
>>2508477 > Можно, ебани в хедер ты имеешь в виду mainwindow.h? программа больше не компилируется, пишет :multiple definition of `fileName'; mainwindow.h:11: first defined here больше я её нигде не объявлял, это единственное не закомментированное объявление. я не понимаю что ему от меня надо.
а, всё, проблема решилась тем что я нажал build-run qmake а потом build-rebuild, так что это была особенность не крестов а особенность qt creator, и единственное где это объясняется это один пост на их форуме который еле заметишь.
суп в универе дали задание написать алгоритм Ли, на языке С. не программистская специальность, теории графов у нас не было, но там ничего сложного. написал очередь для алгоритма, написал список смежности, и тут я проснулся в подливе и тут у меня возник вопрос: а этот алгоритм на списке можно вообще реализовать? все реализации которые я видел были на С++ матрицах смежности. из литературы я изучал В.В. Прут "Алгоритмы на языке С" издательство МФТИ, там тоже всё на матрицах двачик, я уже ёбнулся с этими структурами. хелп ми ор килл ми
>>2511040 это не лаба. в универе вообще ничего про это не было и не будет ни у кого на моей специальности. мне и не нужно чтобы кто то что то за меня писал. мне просто нужны ответы на вопросы, по тому что я не понимаю некоторые моменты.
>>2512030 Да. Было бы желание, ибо сейчас байтоёбов с универа нихуя не выходит - все на вебе, мобилках.
Желательно чтобы у тебя было хотя бы несколько коммитов в опен-сорсные проекты, совсем будет заебись если умудришься что-нибудь в ядро запихать там есть мелкий задачки вроде исправления опечаток: это всё покажет что ты умеешь следовать описанным в проекте процессам, понимаешь что такое ревью кода, ну и вообще вменяемый человек.
Ну и стоит сказать, что скорее всего твоя байтоебля будет связана с линуксом, причем вероятнее всего не на ПК, а на всякой встраиваемой хуете.
>>2495049 (OP) Кто пробовал собрать gcc из исходников? Я вроде добился на ubuntu сделал ./configure потом make без ошибок. Вот только не понял make install надо делать? В оф. документации вообще не говорится что это надо делать. Где теперь новые бинарники? Как запустить?
>>2512792 Я хочу отдебажить сам gcc. Я кажется нашёл что он пропускает warning с неинициализированным указателем в определённых условиях, хочу разобраться почему он так делает, ну и если я прав что это ошибка, то попробую сделать контрибьют. Хорошая строчка будет в резюме - типа я сам компилятор правил и почти весь прочитал.
Тогда лучше всего собирать его с префиктом вроде /opt/gcc чтобы make install устанавливал его туда. В противном случае ты рискуешь переписать файлы системного gcc, что ни к чему хорошему не приведёт.
А еще я бы рекомендовал тебе всё это делать в chroot, чтобы не попортить систему. В этом случае даже если ёбнешь что, то перегенеришь chroot и всего делов. Про chroot рекомендую почитать тут: https://wiki.debian.org/Schroot
Аноны, а есть ли смысл писать на чистом Си, если ты: . не имеешь дело с легаси кодовой базой; . не разрабатываешь под платформу, на которой нет компилятора C++; . не пишешь что-то настолько маленькое, чтоб удобствам C++ негде было проявиться? Я прекрасно понимаю, почему с него полезно начинать. Приучаешь себя взвешивать цену каждого действия, и вообще простота для вката, годный учебник K&R, ничего лишнего, все только самое важное. Сам Сишечку люблю и обожаю. Но сейчас даже с точки зрения микрооптимизаций мне C++ кажется лучшим языком. На C может быть лень прибегать к нечитаемому байтоебству, и ты предпочтешь какое-то компромиссное решение. А на крестах ты один раз сделаешь какой-нибудь zero-overhead прокси-класс на темплейтах, и всегда простым синтаксисом будешь дергать его, получая идеальный перфоманс без компромиссов.
Алсо, слышал (и сам замечал), что на крестах бинарники получаются тяжелее из-за библиотек. Но разве под resource critical задачи не существует инструментов, которые выковыривают код неиспользуемых символов? Или на уровне .o файлов это какой-то неавтоматизируемый анализ с точки зрения математики? Я тупой, объясните.
А еще тут в каком-то из тредов кидали ссылку на cmustdie, где рассказывается, какие разработчики GCC конченные пидарасы, хуесосы и нехорошие люди. Стандарт стандартом, но разве это мешает запилить некий Gigachad C Compiler, который будет соответствовать всем канонам труъшности и гарантированно поддерживать всякие Кармаковские трюки as expected? Или gcc/clang так умеет, если прям все-все-все -fno-strict-aliasing проставить?
Ну а то, что он позволяеят делать что хочешь с указателями и не заставляет кастовать, как кресты, это мне как раз нравится, и тут анало-говнет, ящитаю.
>>2512871 >что на крестах бинарники получаются тяжелее из-за библиотек. Но разве под resource critical задачи не существует инструментов, которые выковыривают код неиспользуемых символов? когда нет ресурсов пишут свои библиотеки. можно ещё юзать прогу strip.
But if the package installs scripts as well as real executables, the install-strip target can’t just refer to the install target; it has to strip the executables but not the scripts.
install-strip should not strip the executables in the build directory which are being copied for installation. It should only strip the copies that are installed.
Normally we do not recommend stripping an executable unless you are sure the program has no bugs. However, it can be reasonable to install a stripped executable for actual execution while saving the unstripped executable elsewhere in case there is a bug.
Сап, аноньчик. Подскажи каких-нибудь сайтов/учебников с задачами и их решениями на си. Я вкатыш в си, лекции есть, а практики не хватает. Нужно что-то несложное но и с решениями для проверки
>>2517328 Первое нелогично из за возможности объявить несколько таких переменных через запятую, и в каждой будет нужна звездочка. Тут же написано будто звездочка принадлежит слову типа, а значит остальные такие переменные должны быть без звездочек.
Помогите написать функцию, которая переводит десятичное число в двоичное, но использовать массивы запрещено. Можно только циклы и printf scanf. Я тупенький, если не могу это сделать? Мне как дальше то...
Здравствуйте, мудрецы-деды! Бекендер-зумерок на связи. Хочу вот долгое время изучить как устроены все мои приложухи на более низких слоях абстрации, поэтому захотел изучить C, но т.к я за практикоориентированное обучение, то могут ли мне мудрецы подсказать маст-хев проекты которые нужно реализовать. Пока что в списке только два - HTTP сервер( не дорос до него чутка) и своя оболочка типо баша, но облегчённая(прямо сейчас делаю)
>>2518453 >могут ли мне мудрецы подсказать маст-хев проекты Да, есть такой. Функция, которая переводит десятичные числа в двоичные! >>2518426 Не понимаю...
>>2518465 Прогу консольную, которая извлекает все mp3 из произвольного незашифрованного несжатого архива. Если есть теги, то извлекает mp3 с тегами, если тегов нет, то извлекает mp3 без тегов. Понимает любые варианты mp3. Память использовать по минимуму, в идеале 64 килобайт.
То же самое для всевозможных вариантов jpg.
То же самое для всевозможных вариантов dds.
Прогу, которая извлекает всю графику из pdf в исходном качестве. Тут пригодятся наработки с jpg, а также библиотеки zlib и stb_image_write.
Консольный калькулятор с блекджеком и шлюхами. Чем больше умеет тем лучше.
Как работают флаги -l(LIBNAME) у гцц? Где находятся эти сорсы, которые он прикладывает? У меня на убунту check 10 версии так подгружается через -lcheck, а мне нужно чтобы подгружался 11. Как обновить?
Ребята, есть ли разница между этими строками struct FixedGridCell fixedGrid; struct FixedGridCell fixedGridArray[1]; Мне нужно из C модуля в мою смузипарашу вытащить хороший указатель на один экземпляр моей структуры, чтобы потом копирнуть её в нативный буфер для ГПУ
почему данный кусок поделки на C ничего не выводит, хотя очевидно что при табуляции X принимает значение 0? по наблюдениям при табуляции получается не точное число, а что-то стремящееся к данному числу. пытался в костыль с округлением, не помогло. При этом если заменить 1./10 на 1./2, то оно выполняется }
>>2519994 дело не в умножении, а в том что ты можешь только сравнить больше или меньше число, но не использовать сравнение на равно.
x>0 или x<0 работать будет. сравнение на равенство может производится через так называемый epsilon, достаточно малое значение которое определяет разницу между величинами.
x-a < EPSILON. Другой вопрос, чего ты решил использовать дубл, не понятно
>>2520000 Да, благодарю за пояснение. Эпсилон решает эту проблему. https://pastebin.com/yptgdPJu Насчет double, его применение действительно не обосновано, этот код - тестовый стенд для наиболее простого воспроизведения проблемы, изначально возникшей при табулировании системы уравнений с шагом 0.1, офк там сравнивались переменные с плавающей точкой и в итоге число "на стыке" двух множеств попадало не на ту "ветвь". Как-то так
Назрел вопрос по naming convention касательно typedef struct. Используете ли вы что-то из перечисленного, или у вас свой взгляд на именование typedef`ов ?
>>2520851 Так, стоп. А если я вообще ничего не пишу после скобок, если использую typedef? Для чего там вообще разные имена? Путаница какая-то получается.
>>2522855 На ideone код работает, но переменная получается неинициализирована из за того, что её функция не вызывается. Только не понятно, зачем так делать, зачем вызывать только маленькую функцию напрямую. Ну и static на функции не имеет смысла.
Привет, чувачки. Появилась идея визуализировать всю оперативную память на комплюктере; для этого я буду слать память кусками на гпу и выводить её в текстуру и показывать на экране. Вопрос такой, можно ли выполнить подобный код из прилолжения: Взять указатель натурально нулевой ячейки памяти, прочесть следующие 100500 байт, оступить на 100500 байт, прочесть следуюшие 100500 и так пока все 16 гиг оперативы не будут пройдены?
Хуита какая-то. Это ведь все на стеке остается, куда ты пытаешься сослаться. Может структуру какую заебашить? И держать там стейт и указатель на функцию. Правда не понятно нахуя оно тогда надо.
>>2495049 (OP) >единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне Ты это про С++ штоль? Ничего против С не имею, хороший язык который, однако, уже неактуален в силу наличия крестов. Они удобнее ну практически во всём, особенно когда речь идёт о жирном прикладном софте или геймдеве.
>>2511834 спасибо, в целом я сам плюс минус разобрался, но с ссылками этими стало чуть понятнее. эти источники мне гугл не выдавал, может искал не правильно, не знаю.
>>2524202 Тоже считаю что он прав. Не надо воспринимать плюсы как современное говно, в которое неклторыеиуебки хотят его превратить. Плюсы вполне себе эволюция си, пиши на в ортодоксальном стиле и в хуй не дуй. Подводных нет - одни профиты.
>>2524202 >>2524511 Сразу триггернулись. Вы вообще к чему-то помимо шаражных ардуинок касались? В реальном мире большинство работы это крупная работа. Работа требующая четкой структуризации и документации. Кресты вообще ничего не навязывают и позволяют пользоваться языком как хочешь, что открывает им двери в разработку больших проектов. Сишечка так не может. >>2524388 >Не надо воспринимать плюсы как современное говно, в которое неклторыеиуебки хотят его превратить. Не надо вообще его никак воспринимать. Он максимально гибкий. Может быть современным ЯП, где ты никогда не прикоснешься к памяти напрямую, а может быть и старомодным задротством с дотошным менеджментом памяти. Каждому своё.
>>2524528 >Кресты вообще ничего не навязывают и позволяют пользоваться языком как хочешь, что открывает им двери в разработку больших проектов. В голосяндру
>>2524543 >Но как видишь, живее всех живых Как я вижу, си мертвее мертвого. Даже на всяких ардуинах питоны накатывают, а уж про нормальные программы для компьютера и речи быть не может, си просто негоден совершенно.
Си как язык/компилятор - абсолютно мертв. Жива только сишная парадигма программирования за счет поддержки кестами, которые и есть живой язык. Так что этот тред по факту тред крестов с сишной парадигмой, а тред крестов это тоже тред крестов, но про более новые парадигмы.
>>2524550 Мне твое мнение о ардуинках конечно очень интересно, но попробуй на том же хх ру посмотреть, актуальны ли си ещё или нет, ищут ли работадатели новых людей чтобы писать сишный код или нет
>>2524569 Язык не обеспечивает этого, всё переложено под ответственность программиста, требуя от него высокой квалификации и дисциплины.
Другие же языки наоборот, рассчитаны на безграмотных дебилов, и жестко форсят "правильный стиль" своим синтаксисом. Первой ласточкой был паскаль, ну а современные языки лишь последователи этого подхода.
Ананасы, подскажите, чёт я никак не могу запомнить, в сях есть инициализация по умолчанию нулями? если я делаю вот так int a[100000]; это значит что уже все элементы массива а это нули?
>>2495049 (OP) Как гуглить инфу (статьи, книги) по Си? Как гуглить вакансии? Дело в том, что из за короткого названия почти всегда показывает результаты по C++.
И еще вопрос проистекающий из предыдущего. Хотел нагуглить вакансии и статьи, чтобы понять что обычно пишут на Си за деньги и какие требования. Из релевантного что попалось в основном embedded. Для C++ вакансии поинтересней, но он большой и сложный, не хочется соваться.
Получается, что на Си за деньги можно писать только под мелкие железяки? На удаленку надежды тоже нет?
>>2527806 >Как гуглить инфу (статьи, книги) по Си Форум RSDN.ru там есть поиск.
>Как гуглить вакансии Мы не нужны в этой стране.
>что обычно пишут на Си за деньги и какие требования Ну скажем, внутри автобуса ЛиАЗ крутится FreeRTOS, а мосты в Санкт-петербурге разводят с помощьюQNX, под них и пишут.
>Для C++ вакансии поинтересней "Доширак, велосипед, зеркалка и интересные проекты на C++", ага.
>Получается, что на Си за деньги можно писать только под мелкие железяки Так и есть, даже форумы живы: arduino.ru и electronix.ru активны весьма. Но вакансий там нет (объявления от Kraftway и НИИСИ не считаем).
>>2527979 >Форум RSDN.ru там есть поиск. Это троллинг тупостью? Еще бы посоветовал фидонет.
>Мы не нужны в этой стране. Я спросил как гуглить вакансии, а не поучений в какой стране жить.
>Ну скажем, внутри автобуса ЛиАЗ крутится FreeRTOS, а мосты в Санкт-петербурге разводят с помощьюQNX, под них и пишут. Это снова троллинг тупостью? Сейчас не советское время чтобы рассматривать такое в качестве работы. И сколько же таких вакансий в процентах?
>"Доширак, велосипед, зеркалка и интересные проекты на C++", ага. Теперь точно ясно, что твоя цель только повыпендриваться.
>Так и есть, даже форумы живы: arduino.ru и electronix.ru активны весьма. Нет, не так. Есть много вакансий где надо писать что-то под линукс. Ты кроме того, что тролль, еще похоже не в теме. И ты не ответил на главный вопрос, как гуглить любую инфу по Си, если название языка состоит всего из 1 буквы и по этой причине результаты запросов или по C++ или вообще нерелевантны.
Попробуй загулять компании из интересующих тебя областей (например исходя из того, что ты сам хотел бы делать). Если контора приличная, то на сайте будет список вакансий и там наверняка будет что-то связанное с C/C++.
>>2528054 Если гуглишь на русском, то прямо так и пиши "Си", на англе иногда помогает "pure C". Хз, что ты там под линух на сях собрался делать, но даже в моей госпараше уже давно укатились на Qt.
>>2528054 Не пользуйся гуглом, он совсем скурвился просто, раз такое не ищет. У меня такая проблема не только с Си, но и с другими областями, например если писать вопросы по D&D 3.5, он перекидывает на D&D 5, а еще он часто подменяет даже слова в кавычках, искал something "once", а он подсвечивает что нашел something "many", не шучу, буквально такая замена была. (Эх, скорей бы Zig стал production ready, вот он из трех букв и легко ищется)
недавно узнал, что вместо array[index] можно писать: index[array], потому что и то, и то транслируется в *(array+index) лооооооол О_о зачем так? такое ощущение, что они на похуях делали этот язык
>>2528870 > такое ощущение, что они на похуях делали этот язык Ты себе не представляешь насколько на похуях его делали. Например можно было объявить функцию так foo(a, b) { return a + b; } Потому что похуй )) Если вернул значит это аккумулятор, а значит инт )) С другой стороны а ты видел госдолг другие языки, че там? Алгол, Фортран, Кобол
Деды, вы тут сидите и ностальгируете? Суть треда то в чем? На сишке сегодня только курс по информатике рассказывают. Никто на этом старье (time()) не пишет, кроме первокурсников
>>2529784 на С- пишут прошивки для всех устройств, ядра ОС, драйвера и вообще всё. Я только на Си научился понимать и писать программы, остальные языки слабые, по сравнению с Си. Потому что- позволяют писать программы, самым простым и единственным способом.
>>2529784 >>2529798 но си ведь прародитель почти всех популярных языков, хотя бы за это он заслуживает уважения на самом деле си - это старый, трудный в общении дед, который временами творит и несет полную дичь, но если бы, когда-то этот дед не ебашил, мы бы сейчас находились бы в анальном рабстве у какого-нибудь предка кобола, а также корпораций с их лицензионной политикой при таком положении дел, вся индустрия застряла бы в начале 00-х, и размер ваших зарплат был бы там же и далеко не факт, что кобол всех бы заебал, и люди просто ушли бы в паскаль/аду, если посмотреть как форсится ООП при всех его недостатках, то запросто можно представить ситуацию, когда на первом месте у всех стояла бы идея близости к естественному языку поэтому проявите уважения к деду, напишите на досуге хотя бы пару строчек на нем, он же ведь за вас воевал... кста, здесь прикольно показаны его дети https://www.youtube.com/watch?v=lDjZA0wodGQ
>>2530076 Просто фокус, подобрали такие что 48*3+a+b+c=100a+10b+c a=1 иначе улетим в 200 144+1-100+b+c=10b+c 45=9b, т.е. вторая цифра 5 c сокращается, значит последняя цифра может быть любой
>>2524121 Ну это реализация стандартной библиотеки C и posix библиотеки C с дополнениями. Например функция argp_parse есть в GNU C, которая не входит в posix.
>>2524149 >Я именно диалект GNU C имел ввиду Так пойди почитай доки
Предисловие
Это справочное руководство по языку программирования C в его реализации. сборником компиляторов GNU (GCC). В частности, это руководство направлено на документ:
Стандарт ANSI C 1989 года, широко известный как «C89». Стандарт ISO C 1999 года, широко известный как «C99», в той мере, в какой C99 реализуется GCC. Текущее состояние расширений GNU для стандартного C
В данном руководстве C89 описывается как базовый. Возможности C99 и расширения GNU явно помечены как таковые.
По умолчанию GCC компилирует код как C89 плюс специальные расширения GNU. Много C99 поддерживается; как только будет доступна полная поддержка, компиляция по умолчанию диалект будет C99 плюс расширения, специфичные для GNU. (Некоторые из Расширения GNU для C89 стали стандартными, иногда слегка измененными. особенности языка в C99.)
Язык C включает набор директив препроцессора, которые используются для такие вещи, как замена текста макроса, условная компиляция и файл включение. Хотя обычно описывается в руководстве по языку C, GNU C препроцессор был тщательно задокументирован в The C Preprocessor , отдельное руководство по предварительной обработке для C, C++ и Objective-C. программы, так что это не включено здесь.
Недавно получил предложение на стажировку(Embedded C) Может ли кто-то посоветовать книжек для дальнейшего развития( читал только Стивена Прата да практиковался на hackerrank)
Да и есть ли какие-то годные материалы, чтобы с виндузятника перейти на Линукс, как этого будет требовать работа?
>>2530019 очень тупо, в Си все входные и выходные данные нужно паковать в структуры struct N { // тип // переменная } и обработчики данных типа N add(N1,N2) которые уже будут раскидывать по другим обработчикам в зависимости от типа- addInt(N1,N2) addString(N1,N2) addIntArray(N1,N2) и т.п к тому же, в таком случае можно задать неявные поведения при нарушениях граничных условий, например занулять больший массив или уменьшать его размер. Вообще, все входные данные программы- нужно всегда держать под контролем, нарушения типов не должно происходить в принципе, это профанация, когда разные типы сочетаются, всего лишь потому что операторы это позволяют.
Помогите, пожалуйста, с домашним заданием. Суть такова, надо создать динамичный массив запрашиваемой длины, потом принимать ввод от пользователя и создавать динамичный массив из char'ов внутри каждого элемента. Потом все записать в файл. Вот мой код, в нем почти ничего не работает.
>>2531064 Алсо, анон, я только когда в кровать лег, то понял, что в функции AbuInit обосрался. Исправь >char buff[sizeof(int)]; и >fgets(buff, BUFF_LEN, stdin); НА >char buff[32]; и >fgets(buff, 32, stdin);
Не обязательно 32, можно и любое другое число, но не меньшее, чем потенциально может ввести пользователь. Я сам не прогер и сишку только в универе щупал 5-7 лет назад, плюс прибухнул чутка и подумал, что выделяю байты через char. Так-то оно верно, если у тебя на машине char в 1 байт, но atoi() оперирует символами, а не байтами, поэтому 4 символа под количество строк - это мало, и если ввести больше, то получишь сегфолт.
>>2531343 О вот это уже понятно. Примерно все будешь понимать в процессе работы с микрухой. Для начала тебе нужен даташит на твой контроллер, открываешь его и читаешь для начала про тактирование и как его правильно настроить - это ты будешь делать в каждом проекте в самом начале. Дальше, в зависимости от задачи, смотришь какую периферию ты будешь использовать и читаешь в даташите про настройку периферии, параллельно смотришь как она вообще работает, если до этого не знал. Из книжек могу вот эту посоветовать, для понимания архитектурных особенностей очень полезна. Там много полезной инфы, даже если у тебя не М3. Ну и когда будешь чувствовать себя нормально среди всей этой инфы можно начать вкатываться в RTOS. Есть хендбук по FreeRTOS'y например.
>>2531361 Забыл добавить. К каждому контроллеру обычно есть короткая выдержка из тестовых примеров разных проектов от оф разраба. Обычно называется что-то типа Quick Start Guide. Его читаешь вместе с даташитом.
>>2531342 >Без понятия Почему не поинтересовался? Лучше задавать вопросы, чтобы не попасть на кидалово. Возможно у них корыстный интерес попользоваться тобой. А может просто спрос на такие вакансии низкий.
Посаны, пытаюсь написать кольцевой буфер, хранящийся в памяти стм32, но везде в примерах динамическая память. я тупой, киньте пжлста понятный пример как сдлеать кольцевой буфер не с динамической памятью. заранее спс
>>2531598 Честно говоря, почему то не задумывался об этом, так как был очень рад самому факту получения работы. Ну в Украине не особо много вакансий embedded, да я и сам почти не встречал тех, кто этим занимается/хотел бы заняться
Книги по ассемблеру x86, x86-64, изучение разных режимов памяти в языке ассемблера, книга по С от Дениса Ритчи, книга по С++ и опп от Страуструпа, книга по схематехнике. Книга по устройству осей от таннебаума, книга по сетям от таннебаума...
И вот изучаю, изучаю, уже по сути в общих чертах весь компьютерх насквозь вижу начиная от маленьких транизисторов на кристалле процессора и прошивки и заканчивая, файловыми системами, драйверами ядрами. Понимаю что приблизтельно в нём происходит на любом этапе загрузки и работы, НО.
А что делать? Вот я уже чувствую в себе силы написать реальную рабочуюТМ фичу. Но что писать? Была идея написать программу которая бы восстанвливала файлы стёртые быстрым форматированием или даже целые тома и системы выпиленые очисткой таблицей разделов, но все эти программы уже запилены и запилены лучше меня, на велосипед время тратить не охота.
Что пилить то? Тупо понимаю что если я в области систем что не возьмусь пилить оно уже всё запилено.
>>2531934 Может быть какой-нибудь инструмент написать для упрощёного редактирования реестра винды? Или написать программу по выводу температур с датчиков компьютера? Да всё это уже давно есть.А ну что писать, ну подкиньте идею, что можно под винду написать такое системное, какой-нибудь фильтр может в какой-нибудь стечок драйверов, может быть программу упрощающую какой-нибудь менеджмент...
Была идея написать программу которая бы переводила двоичный код любого файла в пиксели и сохраняла это в формате .png, а потом этот .png опять раскодировать в любой файл, хоть в exe но такое тоже есть. Да что делать то блэт. В системаче уже как будто написано абсолютно всё что только можно. В линукс пока пытаться не буду, у меня хуже представления о его ядре, драйверах и прочем устройстве. Хотя арч таки осилил в сборке по гайду.
>>2531937 Хотел тебе предложить херню связанную с линуксом, там очень много работы, но ты с ним не знаком. >написать программу по выводу температур с датчиков компьютера Попробуй эту идею развить. Серверное приложение считывает данные о состоянии ОС и отсылает данные в пакетах через сокеты клиенту. Клиент может быть любым: ГУИ-приложение, консольное приложение, веб-приложение. Эдакая телеметрия.
>>2531937 Напиши программу умеющую пищать динамиком материнки разную музыку. Чтобы именно динамиком, а не звуковой картой, чтобы ни в каких случаях звук не перенаправлялся на звуковую карту, иа играл именно аппаратный динамик воткнутый в материнскую плату.
Аноны, а тут есть безопасники или реверсеры, кто занимается этим под линух или бывал на СТF и просто шарит? Пытаюсь сделать маленькую роп цепочку, но у меня почему-то все как-то странно работает. Даже хз, есть ли смысл спрашивать.
>>2531714 задаешь статический массив char arr[1024][1024]; считываешь в цикле каждое слово в новый ряд массива. Потом пишешь свой strlen (функция измеряющая длину строки), который будет измерять длину каждого слова. Создаешь второй второй массив. Пробегаешься по исходному массиву со стрленом и самое длинное слово записываешь в первый ряд второго массива и так далее пока всё не запишется во второй массив в нужном порядке. Выводишь второй массив.
>>2531937 >Да всё это уже давно есть. напиши программу, которая из любой программы создает портабле екзешник который можно запустить с флешки на любом компе без установки ОС, прямо флеш вставляешь вылезает меню с прогами в биосе, и запускаешь.
>>2532465 Что делает эта программа, пиши программы которые делают полезное, или не пиши вообще ничего. Нахуй ты указатели тянешь в это, какую задачу этим решаешь?
>>2532349 Такое вообще реально написать? Программы винды же используют библотечные функции самой винды, из под биоса ты хуй их запустишь, только если какую-нибудь загрзочную версию винды прилепить к ним.
>>2532569 >реально написать? реально, но не для средних умов. А api винды что использует? Нихуя не использует, если экстрактировать оконное и юзер api, можно в мегабайт всё уместить. ОС Шиндовс- на 90% состоит из кучи говна и палочек, а также кучи драйверов к разному барахлу. Линупс точно такое же дерьмо.
>>2532825 Ядро винды сильно завязано на этом говне и палчках и часто если их не будет то оно просто работать не будет. Тот же гуй намертво ввареный в ядро, на лине его можно без задней мысли выпилить
>>2535834 long long wage = 5400; int hours = 396; long long sumBefore = wage*hours; long long deduct = sumBefore / 10; long long sumAfter = sumBefore - deduct; А ты думал нас на float поймать, сучечка?
>>2535256 >че это такое #ifndef SET_H #define SET_H ... #endif Это include guard, пишется чтобы файл только один раз подключился, иначе будут ошибки что ты переопределяешь уже существующие сущности.
extern const void Set; Указатель на какой-то объект неизвестно какого (void) типа, который определен в другом (extern) файле
void add (void set, const void element); Объявления функций. Заканчиваются ; и не содержат само тело функции. Само определение находится, скорее всего, в соответстующем .c файле, где уже расписан алгоритм, что именно делает эта функция.
Аноны, обьясните неофиту какой промежуточный формат данных использовать для их последующей передачи на ЭВМ с другой архитектурой и другим представлением чисел? Если кратко, то я купил одноплатник на ARMе и написал для него серверное приложение, которое общается с клиентом на основной пекарне amd64. Проблема, собственно, в том, что отправленные с клиента данные интерпретируются сервером невалидно и как я понял, это происходит из за разного представления чисел на моих системах. Как передать значение в промежуточном формате? Например, клиент: открыл сокет, упаковал данные в промежуточный формат, послал данные, закрыл сокет. Сервер: открыл сокет, принял данные, распаковал промежуточный формат, закрыл сокет.
>>2537005 ты когда последний раз видел big endian процессор? То было во времена когда Интернет гоняли подключенным патч-кордом к серверам Sun. Но Sun is down.
>>2537000 >Проблема, собственно, в том, что отправленные с клиента данные интерпретируются сервером невалидно и как я понял, это происходит из за разного представления чисел на моих системах. А с чего ты взял? Одни имеют одинаковую "оконечность".
>>2537517 >А с чего ты взял? Например, отправляю на сервер число 4, а приходит число 27. Нашел обертку для сокетов в которой все числа приводятся в промежуточный формат и с ним все нормально получается. Похоже я чего-то не понимаю и это нюансы при работе с сетью как сказал этот анон >>2537344
>>2537600 >Например, отправляю на сервер число 4, а приходит число 27. Так это число 4 не должно было испортиться. Оно в один байт влезает. Нужно подробнее описать.
Дарова, аноны, проработал я вот значит первые свои пять дней на позиции трейни -- попрятался в подвале от ракет, настроил корпоративный ВПН, клонировал с битбакета проект, поставил нужные проги и в общем настроил рабочий ноут под себя
Сам я trainee embedded C, со слова моего нынешнего куратора-сеньйора взяли меня чисто из-за какого-никакого понимания азов схемотехники и прочее лабуды физики старшей школы(я сейчас радиотехник второго курса уника)
Си знаю самые основы(синтаксис знаю, знаю про динамическую память, про организацию памяти и прочую хуету для новичков) -- читал Прату, Ритчи, решал задачки на хакерранке). Сказали, что надо разобраться в корпоративном CodeStyle пока что.
У кого-то есть идеи как можно дальше развиваться? В каком направлении учить Си для железяк, может кто-то может посоветовать курсы/видосы/книги/сайты? До этого я только дрыгал ножкам на Атмеге на ассемблере. Смотрю на рабочий код -- по синтаксису вроде все понятно, а что он делает -- нихуя
>>2544392 Я криво прочитал твое задание, у тебя наоборот надо в 2д массив из 1д массива. Еще не забудь выделить память всем подмассивам. Иначе arr[0][...] не имеет смысла
>>2544467 >значение что такое софт скиллы знаешь? А ты?
Подсказываю безграмотному чухану: >блат >своячество >кумовство >чинопоклонство >прихлебательство >холуйство >лицемерие >показуха >изворотливость >ушлость >пронырливость >интриги >подкопы >подсиживание Вот что такое это ваше пидорское "софт скилл". Быдло прикрыло кучу дерьма простыночкой и думает что незаметно и не воняет.
>>2544809 Да повезло мне, честно говоря. Меня рекрутерша сама нашла в линкедине -- так и прошел. Это с учетом того, что для вкатнуов сейчас во всем мире тяжело + я в Украине сейчас, а ты сам понимаешь, как сейчас у нас с работой
>>2544886 Мне одногруппник недавно рассказывал, как тоже в эмбеддед вкатился, ответив "не знаю\не работал" на половину вопросов и сказав, что писал на Си, хотя вакансия на крестах была.
>>2545071 Я буквально ты значит, только у меня в проге знаний больше, и они не ограничиваются только байтоëбством. А с железками да, только в универе познакомился.
Дратути, вопрос по алгоритмам. Не срочный, но буду бампать пока кто-то не поможет.
Короче открываю в программе пикчу, разбираю ее попиксельно, получаю двумерный массив размером как у открытой пикчи, где элемент равняется нулю если пиксель белый, и единице если пиксель черный. Где-то на картинке есть одна черная рандомная клякса. Как найти координаты ее центра масс и соответственно координаты центра масс в массиве?
>>2545316 >Где-то на картинке есть одна черная рандомная клякса. Ищешь описывающий прямоугольник кляксы, например первое пересечение с точкой снизу/сверху/слева/справа.
>>2545327 Но я о том, что любая тонкая сопля торчащая из кляксы полностью смещает координаты нужной точки потому что описывающий прямоугольник будет охватывать и эту тонкую соплю. А в рельности тонкая сопля практически не влияет на общую массу кляксы. Поэтому вариант хороший, но это не центр масс вроде как.
Я вот тоже алгоритмику пишу, написал отсечение вариантов, эвристику выбора, которая вероятностно срабатывает, ну да не суть. Так как работает отсечение вариантов заранее, чтобы не включать их в перебор, ветви и границы, соответственно есть несколько проверок во внутренних циклах, а внешний цикл - он по элементам массива (вообще рекурсивный перебор должен быть, но я размотал хвостовую рекурсию и сделал более быструю итеративную версию). В общем, внешний цикл идет по j. Во внутренних циклах много проверок, куда в качестве выражения входит arr [ j ]. Я решил сделать еще одну свою оптимизацию, ввел одну переменную, в которую в начале проверок записывается arr [ j ].
Логика простая - чтение из переменной temp дает условную одну операцию На чтение из массива - складываем адрес начала массива arr и индекс j, и читаем переменную, это дает условные две операции
Ну и прикол в том, что после моей низкоуровневой васянской оптимизации скорость просела где-то в 2-2,5 раза. То бишь обращение к элементу массива (где сначала получаем адрес сложением и потом читаем) оказалось быстрее обращения к переменной (где адрес уже известен). Это не вопрос, просто вот так бывает, анончики, иногда "свои" оптимизации оказываются даже вредными чем те, которые делает компилятор
>>2544993 Да знаем, хипстерок, только какое отношение эта дрисня имеет к ламповой Си? Ты всю жизнь будешь дрыгать ногами и мигать диодами, никакого роста у тебя не будет, максимум до начальника где ты будешь пинать такого же овоща аутиста.
>>2545440 >был быдлосом >дорос до начальника И где рост? И главное, где >программировани на си ? Так до чего ты там дорос? Как был быдлом, так и остался. Как был нулем в программировании, так и остался. Запомни, быдло не растет. Может расти высота кресла и размер зарплаты, но как человек быдло остается говном навсегда, каким родилось, таким и помрет, простым говном.
>>2545385 > и конечно на x86 там не будет двух операций, а будет lea
Благодарю. Реально себя тупым чувствую, но про lea узнал из твоего поста, не знаю как так вышло. В общем, благодарности, чаю и прелестниц тебе, анонче, спасибо, что ее упомянул! Я бы так необразованным и оставался. Всех благ и няшек!
Сяч, для того чтобы слинковать исполняемый файл к динамической библиотеке, необходимо чтобы либа уже была загружена в память? Если да, то помогите советом.
Есть либа, которая будет подгружаться основной программой в известную локацию памяти. Эта же программа будет вызывать функции из неё. Точка входа в либу известна, но смещения её функций могут изменяться по мере модификации либы. Т.е. динамическая линковка отпадает, т.к. неизвестны точные адреса функций. Как организовать лучше всё это? Я пока додумался до контроллера/драйвера либы и вызывать функции через обращения к нему. Например ctrl_lib (идентификатор функции, лист аргументов). Звучит пиздецки всрато, но ничего лучше я не выдумол.
>>2546905 >Сяч, для того чтобы слинковать исполняемый файл к динамической библиотеке, необходимо чтобы либа уже была загружена в память? Непоня. С чего бы? Вот есть сисколл (на самом деле библиотечная фнкция, но не суть), которым программа может сама себе открыть динамическую библиотеку https://man7.org/linux/man-pages/man3/dlopen.3.html И потом dlsym, чтобы адрес найти.
>>2546930 >Вот есть сисколл Теперь понял, что динамическая линковка в процессе исполнения. Спасибо. А то пикрил навёл на противоположный вывод.
Анон, а у тебя случайно есть статьи по динамической линковке? А то само назначение процесса понятно, а что там происходит на уровне исполняемого файла, таблиц символов и самой либы - одно волшебство в голове.
>>2547093 У тебя статья про сборку, а спрашивал ты про работу. Статью про динамическую линковку я тебе выше уже кинул, там и ссылки на все подробности, и примеры.
>>2547295 А на питуне запарсить нельзя? Там же тоже есть функционал для ебания байтов и чтения файлов. Гуглишь структуру csv формата в интернете и вперед. Да и ставлю анус, что такие библиотеки уже существуют.
https://youtu.be/wGCWlI4A5z4 Только что эта хуйня попалась в рекоммендациях и я очередной раз подумал, что сейчас мне обьяснят положняк. Ну не могут же люди высерать пустые и бессмысленные видео в огромных количествах, верно? Итак, заходим... >ряяяя я специально не учел условие и поэтому в программе появился баг, поэтому Си/Си++ говно >ряя в Си++ есть 5 способов сделать одну и ту же вещь, поэтому мне сложно выбрать. Язык говно >в расте есть синтаксический сахар, который делает за меня все то же самое, поэтому язык заебись Охуенная аналитика, браво. И таких бесполезных видео просто миллиарды просто для того, чтобы пропихнуть культуру к которой они "причастны". Нет, чтобы снять видео как ты делаешь крутую штуку на расте, как членодевка из AsahiLinux. Это слишком сложно нахуй, будем распространять маркетинговый булщит. Из-за ебанутого cumюнити даже палкой эт поделие трогать не хочется. Как будто питонисты, джаваскриптеры и прочие макаки. Хотя почему "будто"? Основная ЦА и есть выходцы из веб-параши. Держу в курсе
>>2547655 > посмотрел тупое видео, сделанное специально чтобы набрать больше просмотров > искренне взбугуртнул Ты же сам должен понимать для чего и для кого такое снимается
>>2547774 >Ты же сам должен понимать для чего и для кого такое снимается Для него и снимается. Он посмотрел, получил эмоциональную реакцию, ещё и потащил по интернетам, чтобы другим показать.
>>2547959 >>2547774 Я просто считаю, что вы переоцениваете этих людей. Даже на дваче встречаются такие персонажи при общении с которыми поначалу думаешь, что они троллят, но в конечном итоге оказывается , что они просто долбоебы.
>>2547970 Не имеет значения, случайно автор этого ролика наткнулся на такой формат (просто долбоеб), или осознанно его придумал (троллит), факт остаётся фактом, анон выше >посмотрел, получил эмоциональную реакцию, ещё и потащил по интернетам, чтобы другим показать. То есть цель ролика достигнута — он распространяется, и просмотры капают. Значит обучение обучение с подкреплением произошло, и автор будет таких роликов снимать ещё больше.
>>2547983 Быдлосы любят скандалы, сам видел бабку, смотрит целый день телешоу с руганью и так 8/7/365 и не надоедает и не противно. Грязь это плоть и кровь грязного быдла, они в грязи живут, дышат грязью, едят грязь, и в голове одна грязь.
Здравствуйте Anonchique. Пишу на чистом Си, реквестирую хорошую литературу по системному программированию под Шиндовс, выложил список литературы по которой я практикуюсь, кого-то более лучшего чем Александра Побегайло и Павла Йосифовича не нашёл. Если знаете более хороших авторов, или более современное издание, напишите пожалуйста.
>>2547980 Чел в Си-строке \ означает escape-символ. Например \n означает перевод строки. Для того чтобы в реальной строке в памяти был символ \ В исходном файле тебе надо писать \\ Т.е. "C:\\Path\\File" Это буквально первые страницы любого учебника (параграф про литералы) Вы по тик току учите что ли?
>>2548072 На чистом си под винду нельзя писать, там конец файла не \n, компилятор не ругается на крестовые констпукции и так далее. Только в юниксе си чистый.
>>2547983 Да нет, как раз имеет значение. Потому что ты исходишь из позиции, что вся эта срань изначально затевается ради простотров, что уже может быть не правдой. Я натыкался на множество статей, постов, видосов, где подобные вещи с серьезным лицом говорят без какого-либо троллинга. А для системного языка такое раковое сообщество не очень хорошо. Ну и немного ебанутая позиция в духе "ты же посмотрел, значит все правильно делает". Можно говном на камеру измазаться и тоже много людей посмотрит, но это не значит, что ты сделал что-то хорошее.
>>2548137 >Потому что ты исходишь из позиции, что вся эта срань изначально затевается ради простотров, что уже может быть не правдой. Это ролик, выложенный на ютубе. Если не ради просмотров, то ради чего, по твоему мнению?
>Ну и немного ебанутая позиция в духе "ты же посмотрел, значит все правильно делает". И в чём я не прав? Это работает.
>Можно говном на камеру измазаться и тоже много людей посмотрит, но это не значит, что ты сделал что-то хорошее. Что значит "сделал что-то хорошее"? Хорошее для кого? Для себя автор сделал очень хорошо — просмотры капают, известность растёт. Одни бонусы.
>>2553831 Мне кажется лучше использовать API операционной системы для задач ввода-вывода, чтения данных и т.д., т.к. стандартные функции предоставляемые в Си (как например из <stdio.h> вроде scanf) небезопасны, с ними не удобно работать (особенно с различными кодировками).
Для чтения записи файлов, можно использовать ReadFile и WriteFile.
>>2553888 Лучше использовать метод winapi ReadConsole либо ReadConsoleW (в качестве минимального буфера указать 256 символов, т.к. это минимальный лимит ввода, но ты можешь его увеличить увеличив размер буфера в n-раз кратного 256).
>>2530019 А хрен ли ты хотел, это числа, в Си нет типа string, за то есть минимальный тип char размером 1 байт, как раз для работы с ASCII, и массивы, которые являются указателями.
>>2554131 На пердопараше нет натива, вот эти чуханы везде лезут и воняют своей "мультиплатформенностью", которая означает усредненное говно которое везде работает как говно. Говнари обмазываются говном, как будто что-то новое.
>>2554063 Если у тебя программа упирается по скорости в вывод в консоль, то с ней у тебя куда большие проблемы. Попробуй писать в файл, попробуй бинарные данные вместо текстовых, попробуй слать только дельту изменений.
>>2554339 >На пердопараше >эти чуханы везде лезут и воняют своей "мультиплатформенностью", которая означает усредненное говно которое везде работает как говно. >Говнари обмазываются говном, как будто что-то новое. Двачую.
>>2554522 Пердодебилы такие, да. Даю подсказку - программа, написанная по стандарту, более переносима между разными линуксами, чем программа, написаная под разные версии пердошинды.
>>2554022 >Лучше никогда не использовать какие то мутные расширения, которых нет в стандарте языка Си.
Что, правда ты СКОЗАЛ ? Какие расширения дебилоид ? Быдло, ты когда-нибудь писал код не на питухоне, гейшарпах и для энтерпрайза, а не для своего студенческого мини-проекта ? Ты вообще писал что-то на Си кроме "hello world", я в этом очень сомневаюсь.))
>>2554027 >Тише, щас же прибежит сегфолтошиз Ди нах даун, боюсь представить что будет если тебе доверят писать ПО для авионики, или запрограммировать робота-хирурга, когда ты начнёшь хуярить свой говнокод потому что так СКОЗАЛ индус с ютуба, ведь все вокруг тупые шизы и зануды))))
>>2554944 Имеется в виду, что с указателями легко сделать баги. Берешь указатель на что-то и прибавляешь 100500 - вот он уже указывает в адрес возврата на стеке. Или освождаешь память, а указатель на нее забыл сбросить.
>>2554707 > боюсь представить что будет если тебе доверят писать ПО для авионики Ох, чел, я уже... Соболезную хуле, старайся тогда не летать рейсами грузовых самолетов, че поделать. Свои мокрописьки оставь при себе пожалуйста и не тащи свой кал в тредис.
>>2554639 >На первом пике не стандарт, а какая-то хрень Самый настоящий стандарт. Скачай сам и открой. >Сайзоф выдает размер в чарах, а не байтах Сайзоф выдает в байтах. > На пикрелейтед например (это тмс) размер Инта - 2. На твоем пикриле нет никакого "2" и ниаких байт, только биты. Я же сказал - не путай. Размер char = 1 байт. А вот байт по стандарту может быть разного размера в битах. Но минимум 8. Поэтому там и написано что int минимум 16 бит.
>>2554707 >Ты вообще писал что-то на Си На си я не пишу по причине того что это убогий язык, а на C++ писал серьезный софт когда тебя еще в планах не было. > боюсь представить что будет если тебе доверят писать ПО для авионики, или запрограммировать робота-хирурга Боюсь представить, что будет, если кому-то придет в голову писать такой софт под шинду.
>>2554944 Баги в софте есть всегда. Вся разница в том, что в Си у тебя будет креш с сегфолтом, или тихая порча памяти и данных, а в джаве - креш с NullPointerException, или креш с ArrayIndexOutOfRange
>>2555298 >На си я не пишу по причине того что это убогий язык Потому что ты понятия не имеешь на сколько крут этот язык, и какими возможностями он обладает как например возможность создавать PIC код (код не зависящий от адреса). Можешь писать и дальше свой индусский код на своих гейских крестах, не забудь вернуться в свой опенспейс и допить свой детокс-смузи, а потом сделать селфи со своим HRBP, и подвороты опусти, на улице холодно, зима.
>>2555008 >легко сделать баги >освождаешь память, а указатель на нее забыл сбросить И где тут баг? Освобождение памяти не требует никаких сбросов указателей.
Не ломай над этим голову. По-видимому, оно лечится только полным отказом от указателей (т.е. заменой их на дескрипторы объектов), по крайней мере, я другого решения не нашёл.
Не ломай над этим голову. По-видимому, оно лечится только полным отказом от указателей (т.е. заменой их на дескрипторы объектов), по крайней мере, я другого решения не нашёл.
>>2555637 Ещё такое есть: C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg. – Bjarne Stroustrup
>>2555623 >Освобождение памяти не требует никаких сбросов указателей. Освобождение не требует сброса, а вот контроль, чтобы не использовать после удаления - требует.
Друзья ромогите нубу. Хочу читать текстовый файл в массив флоатов, выбрасывая пробелы, мусор и с переносом строк. из без сппшных стринг вектор и тд, только си
>>2555882 Эта конструкция помогает говнокодить, потому что повторное освобождение указателя это баг, а она его подавляет. Надо лечить болезнь, а не симптомы, исправлять баги, а не обходить их. Условие не нужно, надо чтобы надежно крашнулось по известному значению, и лучше это будет не ноль, чтобы отличить обращение к неинициализированному указателю от использованого, но освобожденного.
>>2556011 Надеюсь, что ты просто троллишь тут новичков, засирая им мозги, а не говнокодишь таким образом реальные программы. > она его подавляет. Не подавляет, шиз. А вот незануление, как раз, подавляет. Ты даже не будешь знать что ты юзаешь афтер фри. У тебя просто какой то указатель, ну и что что ты попортишь чужую память и данные. >надо чтобы надежно крашнулось Как там в 70-х? Надо чтобы корректно завершилось, сохранило все пользовательские данные, вывело корректную подробную ошибку. > отличить обращение к неинициализированному указателю от использованого Охуеть блядь кодинг на кончике пальцев. Если ты попал в это условие, то иди вилкой чисти, у тебя скорее всего и там и там лажа.
>>2556002 Не знаю, что у тебя там за задача, но первое что пришло в голову это сначала запилить функцию, которая считает количество байт в файле, на основе этого количества выделяет память (юзаем вместо массива) при помощи malloc(), далее открываешь файл при помощи fopen(), в цикле (обычно while юзают) считываешь символы в массив при помощи fgetc(), пропуская пробелы и мусор, закрываешь файл, юзаешь free()
>>2557192 Бесплатное же ломается 2 строчками в конфиге и заменой одного жава файла Медленнее кодиума и креатора, это да. Зато рефакторинг и парсинг нормальный. В общем кому что.
>>2560197 Он и не пытается, это хуесос который хочет чтобы за него сделали домашку. Сейчас за него сделают домашку, потом будет делать за него работу. Так и живут, хитрожопое быдло.
>>2560730 >eastern-менталитет Ты про себя, лол? Мы тут за western-менталитет топим, поэтому деньги вперед. Ну сам понимаешь, капитализм, срыночек, все дела.
Пишу в Visual Studio на C++ в стиле Си числовые алгоритмы для криптографии. Как покрыть этот код тестами? Какие фреймворки для этого есть типа junit, jassert в джаве?
>>2562483 >Как покрыть этот код тестами? Паралельно сам пишешь, какие проблемы? На хуй тебе все покрывать, если достаточно основной функционал, там хоть на баше.
>>2562483 > Пишу в Visual Studio на C++ в стиле Си числовые алгоритмы для криптографии. Как покрыть этот код тестами? Берешь wycheproof, например, грузишь евонные случаи libjansson и прогоняешь. Не думай обойтись случайным тестированием.
>>2495049 (OP) Возможно глупый вопрос, но я все же спрошу. Какие профиты в изучении C сейчас? Есть ли смысл изучать сначала C, а потом уже переходить на С++ и другие Си-подобные языки?
Или лучше не тратить время и учить C#? а потом с него перекатываться куда интересно, на тот же С
>>2563287 >Есть ли смысл изучать сначала C, а потом уже переходить на С++ и другие Си-подобные языки? В этих языках разные парадигмы, Страуструпа на пример бонбит если кресты считают надстройкой над С. Но лучше наверное с крестов, ООП параша сейчас в любом модном языке.
>>2560013 scanf() нельзя использовать, он не безопасен!!!!
Для чтения буфера консоли, используй широкие символы для записи юникода (wchar_t или short unsigned int) и метод WinAPI - ReadConsoleW, а также не забудь указать для записи своего массива буфер не меньше 256, потому что это минимальное ограничение для консоли, больше которого пользователь не сможет ввести (если не задаст размер буфера в n-раз кратным 256), также не забудь указать режим преобразования выходного потока в Юникоде через _setmode(_fileno(stdout), _O_WTEXT);.
Либо, если не желаешь возиться с WinAPI можешь использовать getwchar, а для преобразования строк в числа существуют методы atoi, _atoi_l, _wtoi, _wtoi_l.
>>2563333 Даун, причем тут твой говнокод, это системные высокоуровневые методы операционной системы, без которых ты не сможешь написать ничего сложнее "hello world", даун ты тупой!
Ты в курсе что даже в вузах, помимо базовых основ вроде устройства операционных систем дают лабы по написанию программ с использованием WinAPI, или тебя в твоём сельском ПТУ кроме 1С ничему не научили ?
>>2563349 Сам уходи, додик тупой, я от тебя так и не услышал никакой конструктивной критики или каких либо разумных контраргументов кроме >ряяяяяяяя ета гавно яскозал гавно ряяяя
Всё чему ты научился, это сидеть на дваче и оскорблять других пользователей, зная что тебе за это ничего не будет, ебанный неосилятор))))
>>2563352 А когда си увидел сначала, очень порадовался его крутизне, но когда начал писать программы, эти генерик интерфейсы из говна типа консольного ввода-вывода такие убогие, всё равно что руки связали, а потом отрубили. Фублять, фунахуй, без нативных средств программирования не бывает, только теоретическая математика какая-нибудь, абстрактный бесполезный кал.
>>2563428 Да он и не нужен в большинстве прог. Если тулза для пользователя, там нужен гуй, если для сисадмина - ему нужны нормальные логи. Если уж совсем надо - то есть обертки над ncurses и альтернативы. Единственное где это можно оправдать - микроконтроллеры которые надо отлаживать по проводу.
>>2563731 так тогда почему у них в примерах оно само подхватывается? это же вроде как раз в флаге USE_SDL2 и предусмотрено судя по ошибке же он из уже распакованного пакета не может собрать libSDL и говорит, что не видит его
>>2564953 >Нет, при завершении процесса. В основном система чистит, но не всё, кое что остается, поэтому чистить надо всё не ища оправданий чтобы не чистить. Но свиномакаки привыкли срать совсем не обращая внимания, такие в в сях только насрут и обосрутся. Си не для быдла.
>>2565696 Самое распространенное что приходит в голову 1. Use after free. ptr = mysupersecretpassword(); login_with_password(ptr); free(ptr);
Но допустим enter_pwd куда-то сохраняло временно указатель... tmp_ptr = ptr; Если хакир сможет его прочитать, он сможет прочитать твой пароль, хотя ты думаешь что он удален.
2. Buffer overrun/overflow char string[80]; char ptr = string; while(ptr++ = getch()); Но что если хакир не остановится и введет больше 80 символов; тогда они перезапишут какую-то часть стека, и он сможет ввести так прямо машинные коды, который исполнится. Сейчас конечно от этого добавили защит, но все равно это проблема.
>>2565696 1)Чувак,это пиздец кринж, нахуй ты 2 раза память выделяшь? 2)Пикрил полностью безопасный, после работы с памятью можно для безопасности забивать эту область памяти хуйней, например нулями функцией memset, главное в конце очищать память, чтобы система не рухнула
>>2563328 scanf можно юзать, если знать, что scanf("%ns", hiy), ограничивает кол-во символов на входе и не даёт совершить переполнение, ну или использовать fgets, тоже с ограничением. А так в си пиздец с ёбанным wchar, просто кринж
>>2567189 На первый взгяд, в memcpy(AR2 + offset, AR1, sizeof), использовать без амперсанда. Не факт, что твой компилятор адекватно это переваривает(с лишним амперсандом), но в гадболте зеленая галочка, следовательно он это скомпилировал, попробуй убрать &, если не поможет, то семантика
>>2567280 Ок, убрал операнд, вставил в sizeof сам массив, сегфолта больше нет, но заполняется только одна четверть массива, а тут почему? https://godbolt.org/z/afdxsfex9
Хочу прошить ардуинку программой на ассемблере для avr. Поставил себе на винду убунту через WSL, установил тулчейн для avr и avrdude. А как в виртуализированном линуксе определить порт, к которому подключена ардуинка, чтобы указать его avrdude?
давно не лазил в эту тему, а как сыграть ноту? Чтобы просто частота и длительность хотя бы, в winapi было такое beep() А как сейчас с этим обстоит дело? Есть какой-то кроссплатформенный вариант без жирных либ? За это дело вообще кто отвечает, драйвер звуковухи?
>>2567106 >>2567011 Что правда ? Я ведь такой наивный, читаю техническую литературу по системному программированию и документацию, никогда не знал что туда можно передать параметр размера буфера, а на дваче мне открыли глаза, надо же...
Минус этого метода не только в буфере, а в том что чтение символов, заканчивается после того как передается пробел, да конечно, можно указать что-то вроде scanf("%5s %d", buf1, &varint), но это не очень удобно, минус этого метода ещё и в том что он не имеет ограничение на количество символов которые пользователь может ввести физически в консоли,т.к. когда пользователь будет передавать текст в буфер консоли, то тот в свою очередь будет выбрасывать в твой буфер (в массив в куче например), в отличие от метода WinAPI - ReadConsole (ReadConsoleW для широких), в котором ограничение ввода установлено на 256 символов (из которых видимые 254, два последних это переход на новую строку и нулевой терминатор), при условии что размер массива меньше 256*(n+1). Как вариант эту проблему можно решать, через какой-нибудь дескриптор консоли, смотреть сколько байт находятся в буфере консоли, либо использовать getchar() (или его аналог для широких символов), либо писать свои методы которые будут правильно обрабатывать поток ввода, но сейчас на меня набежит один шиз, который не пользуется предоставляемым API, и судя по всему ничего не программирует кроме своих самолетиков на кружке по авиамоделированию, будет доказывать что я не прав... Короче говоря, нужно быть умственно-отсталым, чтобы на полном серьезе писать консольные утилиты используя scanf (или даже его аналоги вроде scanf_t), и если честно я на хую вертел аргументы в духе: "Но это же в стандарте написано, пок-пок...", нужно быть идиотом, чтобы не понимать, что в Си нет абсолютно всего, чтобы этого можно было легко использовать из "стандартной коробки", и тем более чтобы это было удобно, и работало правильно. Это не блядская Java или Python, где за вас уже всё написали, и вы даже не задумываетесь что и как там работает "под капотом". Не просто так говорят, что знание Си = знание операционных систем, знание того как работает железо, т.к. нужно знать не сам язык, а множество аспектов и нюансов архитектуры и среды выполнения, в которой ведётся разработка кода на Си (уже не говоря про умение работать с различными отладчиками и знание ассемблера). Я бы переформулировал это немного иначе, пусть это и звучит абсурдно, но очень хорошо описывает суть вышеизложенного: "Си создан не для того чтобы на нем программировать в той или иной среде, скорее среда в которой ведется разработка, создана для того чтобы можно было писать на Си".
>>2567011 >пиздец >кринж >с ёбанным wchar wchar_t— это тип данных стандарта ANSI/ISO C (а также использующийся в других языках программирования) для представления широких символов. Да, я в курсе что размер wchar_t соответствует машинному слову, а т.к. это меньше 4 байт, то не создает возможности кодировать всю таблицу Юникода, в отличие от Linux где wchar_t составляет 32 бита, т.к. размер типа wchar_t определяется компилятором, вплоть до минимальных 8 бит, поэтому конечно же лучше его не использовать этот тип тем более для хранения юникода. В этом вопросе, я признаю твою правоту, я ошибся, и не уточнил, что под wchar_t я имел ввиду short unsigned int (по крайней мере на моём железе это два байта, (gdb) p sizeof(short unsigned int) $1 = 2) для хранение двухбайтовых символов юникода.
Я больше не зайду на двач, хотел из любопытства, в последний раз, посмотреть что мне написали, и не более, т.к. это помойка на которой мало кто умеет нормально общаться, и к тому же она формирует вредные привычки в общении, закладывает деструктивные макросы мировосприятия довольно пагубно влияя на психику. Проще говоря, 2ch = деградация. На этом всё, всем пока, было приятно (и порой не очень) пообщаться. Не будьте агрессивными петухами, используйте этот тред чтобы делиться полезной информацией, обмениваться знаниями или опытом, узнавать что-то новое, всем удачи.
>>2569794 Залетуха пришел в тред, насрал тут своими мокрописьками и говнокодом, а виноваты аноны. Правильно говорят «Если тебе все говорят что ты пьян, стоит присесть», но залетный этого не понимает и пытается в перефорс своей духотой.
>>2569950 >Залетуха >насрал >мокрописьками >говнокодом >«Если тебе все говорят что ты пьян, стоит присесть» >залетный >не понимает >пытается в перефорс
Ну если ты такой умный, напиши что-то полезное, книги например по системному программированию под Windows/Unix, полезные ресурсы, или можешь например скинуть ссылку на пример консольной утилиты в Win/Linux, а мы посмотрим на твой эталонный код, будет на что ровняться.
А лучше скинь ссылку на свой репозиторий, ты же не какой-то говнокодер-залетун как я, вот за одно посмотрим репу настоящего профи, а я чему-то новому научусь, и стану ещё больше тебя уважать.
>>2570246 Да я устал что-то постоянно ждать от людей анон, как в реальном мире так и в виртуальном мире, проще просто изолироваться и делать то что тебе нравится, литературы полно, документация есть, бесчисленное море всевозможных ресурсов, форумов и прочего, возможность работать удаленно. Каюсь, я и сам когда-то был таким, но это деградация общения, ни к чему хорошему не приводит, тем более в /pr/, я бы понял в /b/ где сидят полоумные школьники, или 40-летние скуфы которые ведут себя как те же полоумные школьники. Порой замечаю, как сам общаюсь подобным образом, и мне становится от этого противно, вызывает отвращение.
>>2570351 Ожидал что ты это напишешь, всё же хочется завершить дилог. Скинь ссылку на свой настоящий git-репозиторий, быть может ты работаешь в сфере оборонной промышленности, и тебя с твоей гениальностью вырвали с руками из твоего универа не дав времени на создание собственных проектов, в связи с чем у тебя нет git-репозитория, поэтому можешь написать простую консольную утилиту под Windows на чистом Си, только подробно закомментируй свой код, и укажи ссылки на используемые источники, либо названия книг которые ты использовал при написании кода. Ты же не чмоха, или како-то залетун-говнокодер, верно ?
Только пожалуйста, не пиши что ты циник, мизантроп, плейбой и филантроп, и что тебе чужда чья-то оценка, т.к. это будет явная демонстрация неспособности аргументированной критики, не падай ниже плинтуса.
Прими тот факт что твоих навыков хватает, только на то, чтобы оскорблять других пользователей в треде, и самоутверждаться за счет матерных выражений, а я в этот тред пришёл чтобы обменяться полезной информацией, узнать что-то новое.
>>2570378 >непонятный кусок кода вырванный из контекста >непонятно кому принадлежит >без комментариев >на C++
Я ведь просил на чистом Си, без плюсов, с подробными комментариями, списком используемых библиотек.
>>2570380 Меня не волнует что ты, и куда скидывал год назад или 5 лет назад, я прошу то, что у тебя есть сейчас, и делаю я это не для того чтобы можно было тебя унизить, в отличие от меня униженной чмохи, залетуна-говнокодера, а для того чтобы понять, "как правильно делать", узнать что-то новое от настоящего профи из мира программирования, именно поэтому я прошу, чтобы код был полным, с подробными комментариями (в разумных рамках), и ссылками на используемые источники/документацию, будь милосерден, потрать немного своего сверх-ценного времени. К тому же т.к. ты профи, много времени у тебя не уйдет, всего-то прошу написать простую консольную утилиту под Windows, желательно чтобы программа понимала и умела работать с UTF-8 и читать символы на разных языках, всего-то делов, для тебя как два байта переслать...
>>2570406 >скидывал год назад или 5 лет назад, я прошу то, что у тебя есть сейчас То, что было год назад, никуда не исчезло и есть у меня сейчас. > код был полным, с подробными комментариями Просмотри видео, там подробнейший построчный аудиокомментарий.
>>2570406 >непонятный кусок кода вырванный из контекста Я и не обещал что он будет полными или понятным. >непонятно кому принадлежит Анону. >без комментариев Самодокументированный код >на C++ Мелочи. Ncurses сишная либа.
>>2570383 > я в этот тред пришёл чтобы обменяться полезной информацией, узнать что-то новое Но пока все что ты сделал - это доебался до анонов со своей духотой и неадекным поведением. Поэтому отношение к тебе соответственное, можешь проследовать нахуй.
>>2570408 >Просмотри видео, там подробнейший построчный аудиокомментарий.
Ну хорошо, видео годное, посмотрю.
>>2570411 > Ncurses Ну вот видишь анончик, я например не знал про этот Ncurses, не знал что есть такая замечательная библиотека для написания консольных утилит ввода-вывода, так что спасибо тебе, узнал что-то новое и полезное, а ведь изначально наш диалог мог начаться именно таким образом, вместо того чтобы покрывать друга друга матом и слать на разные стороны, другие аноны тоже узнали бы что-то новое и поблагодарили тебя.
>>2570429 >Поэтому отношение к тебе соответственное, можешь проследовать нахуй.
Надеюсь ты сильно не обиделся на мои слова, извиняюсь если обидел тебя (без шуток), спасибо что написал про Ncurses. И всё же, хочу добавить, что полностью нельзя уйти от использования API-операционной системы, особенно если пишешь на чистом Си. Буду очень признателен, если ты не станешь слать меня нахуй, а например посоветуешь пару книг по системному программированию (желательно под Windows), я вот недавно нашел замечательную книгу: "Рихтер Дж., Назар К. - Windows via C C++. Программирование на языке Visual C++ - 2009".
>>2570441 >узнал новое >ncurses >Initial release1993; 30years ago >ncurses is a free-software emulation of curses. >The first curses library was developed for a BSD operating system, around 1980 Ох вау. А ты точно Си-программист?
>>2570468 >А ты точно Си-программист? Признаюсь, я не Си-программист, писал на других языках, и очень слабо знал Си и ассемблер (тем более C++), дело в том что меня сильно заинтересовал реверс (и системное программирование тоже), поэтому решил восполнить забытое, и прошло не так уж много времени с тех пор как взялся за изучение этой темы. Не смотря на это, у меня большое желание изучить всё очень подробно, на сколько глубоко это возможно сделать, поэтому был бы рад комментариям и полезной информации от людей вроде тебя, которые варятся в этом не первый месяц, или год.
Пикрил можно как-то более изящно сделать? Вот эти вот (i + 1) и (i - 1) немного смущают. Эта хуйня просто строит пирамидку пикрил2, с двумя пробелами в центре
>>2571162 В программировании нет понятия "изящно", чтобы еще его и сравнить как что-то более или менее. Такие понятия придумывают только смузихлебы и поехавшие преподы. Есть скорость написания кода, скорость работы кода и потребление ресурсов. Вот если нужно оптимизировать на скорость работы, то можно написать, например, так как на пикриле. Если задача будет выполняться особенно на больших размерах пирамид. Видимо также у тебя подразумевается работа с некой двумерной картой, которую будут использовать не в вакууме. Значит задача разбивается на три этапа: 1) инициализировать нашу карту какими-либо значениями (пустого места) 2) установить расположение пирамиды/юнитов на карте/пикселей в текстуре 3) отобразить/отрендерить это на экран/в текстуру
Данный алгоритм с пикрила оптимизируется еще двумя способами: 1) избавляемся от двухмерности массива и делаем одномерным 2) все циклы построены так, что мы можем каждый распараллелить по потокам, т.е. мы параллелим цикл в INIT, параллелим цикл в VIEW, а в SET мы можем и каждый из четырех циклов распараллелить и циклы сами выполнить в любом порядке, т.к. они работают с независимыми данными
>>2571543 >рисует фигуры >printf() printf это же потоковый вывод, годится только для портянок логов - последовательного выблева данных, но никак не для рисования по экрану. Что это за терминальная мозговая недостаточность, что даун не понимает таких элементарных вещей?
>>2572077 > Что это за терминальная мозговая недостаточность, что даун не понимает таких элементарных вещей? >>2572087 > Ну и зачем? Что значит "просто"? Просто дебилы, и не мешай нам дебилить, так что ли? ты то уж что порвался, я ему решил задачу с тем вариантом вывода, что у него была в условии, для визуализации алгоритма. Мне ему что, вкорячивать работу с контекстами графических устройств, может еще тут конвеер вулкана развернуть для такой задачи было нужно? Мне-то не трудно, но наглядности это значительно лишает, т.к. акцент тут на алгоритмах, а не выводе, поэтому в учебных лабах это и используется там, где нужно. Как тебя похмелье-то после праздников еще не отпускает.
>>2572091 >решил задачу Один пришел с тупой задачей, другой для него решил. В результате оба отупели еще больше. Браво.
>Мне ему что, вкорячивать работу с контекстами графических устройств >консоль >работу с контекстами графических устройств Вот-вот, результат одебиливания налицо.
>>2572093 А ты лучше вообще не пиши, раз не понимаешь разницу между принципом работы printf и поставленной задачей рисовать на экране. Это даже к программированию не имеет никакого отношения, а сырой здравый смысл - базовое наличие мозга, не тупить как дебил.
>>2572227 Дебил, ты вообще понимаешь что такое рисование? Представь холст или программу паинт, а теперь подумай, что является основой для процесса рисования? Подсказываю - место, координаты по которым ты собираешься наносить мазки своего рисунка. Рисование подразумевает прямоугольную площадь с ПРОИЗВОЛЬНЫМ ДОСТУПОМ. Заметь, тут программирование даже ни при чем, всего лишь надо не быть тупогогим имбецилом безмозглым, но ты не смог.
А теперь скажи, где ты видишь координаты у printf? Правильно, нигде. Так какого хуя ты лезешь в рисование этим говном совершенно не подходящим для рисования?
Теперь уже программирование. Ты вообще понимаешь, тупой выблядок собаки, что такое компьютерный экран и как происходит вывод на него изображения? Что нужно чтобы рисовать? Нет, не понимаешь. Я бы сейчас посоветовал идти читать, учиться, но не буду. Потому что бесполезно, прежде чем учить компьютеры надо не быть дебилом, а ты уже конченый даун даже без программирования, что ясно видно по первому абзацу не касающемуся программирования, где ты обосрался.
>>2572482 У терминала нет координат. В том то и фишка, что это потоковое устройство, а не блочное. Именно это позволяет подключаться к серверу и там играть в нетхак.
>>2573206 > У терминала нет координат Результат одебиливания printf-ом налицо. Пожалуйста, наглядный пример, как от дебильных задач люди тупеют. С каждым разом привыкают к тупости и тупеют еще сильнее. Уже даже когда прямо тыкают в ошибку, не шевелятся. Тупость закостенела намертво, обученный готов. Занавес.
>>2573022 > Это просто поразительно, как анон мог порваться из-за дефолтного printf'a. не для всех новогодние праздники проходят без последствий, в том числе для психики)
>>2573806 Все запоминается повторениями, причем циклическими, через неделю, через месяц. Помнят только то чем постоянно пользуются, в окружающем мире мало похожего на код.
>>2573806 > Почему сложно учить? Забывается все концепты, быстро. > -девственный ньюфаг С - самый простой язык для изучения. Но самый сложный если пытаться написать на нем что-нибудь вменяемое
Вот realloc() может вернуть указатель, отличный от переданного в качестве аргумента указателя на блок памяти, т. е., по видимому, выделить блок большего размера в другой части кучи, замаппить его/сделать memmove, здесь я уже хз. А что делать, если я исходный блок разбиваю как хочу и везде использую указатели на произвольные участки внутри этого блока? После вызова realloc() память по всем моим указателям будет содержать мусор. Как сделать, чтобы блок нового размера был доступен по старым адресам? mmap здесь может помочь? И вообще, если у меня возникла такая необходимость, то всё ли я делаю так?
есть си код (пик-1) клангом собираю из него wasm (пик-2) после чего дергаю функцию из js (пик-3)
все работает нормально, а как теперь в обратную сторону: вызвать из си функцию js? Как я вычитал, что формируем importObject, который должен будет содержать всё импортируемое в си, пихаем его вторым аргументом в функцию instantiateStreaming, а как правильно объявить ее в си коде и нужны ли еще какие-то флаги при компиляции?
Какое из четырех решений лучше с точки зрения дизайна/читабельности? Надо посчитать финальный счет, когда известны: bill (стоимость без налога), tax (налог в процентах) и tip (чаевые в процентах). Решения разделены строкой если че, все они дают один результат. Четвертое решение это просто математическое упрощение третьего кек
>>2576594 Ничего. Поэтому и говорит что сложно. Или у тебя есть пруфы обратного? Ну показывай.
Си - язык говно, язык пидор с практической точки зрения. Но тут нет вины Си, это наоборот следствие его охуенности. Си идеально соответствует компьютеру, поэтому проблемы с написанием программ это проблемы компьютьеров, железа, а не Си. "Персональные компьютеры (PC)" как платформа это говно ёбаное, отсюда и лезут проблемы. Ничего нельзя написать нормального потому что компьютеры не содержат программной поддержки своего железа, т.к. оно нефиксировано, может быть каким угодно, а значит и годную прошивку не напишешь. Как результат, всё сваливается на сторонние библиотеки, васянские поделки. ПК это сплошное васянство, и Си только лишь отражает эту проблему как идеальное зеркало из за своей идеальности.
Анончики, помогите! Что в этом коде вызывает ошибку переполнения и почему? Она возникает в процедурке array, которая наполняет массив случайными числами, и именно в той части кода, которая не генерит случайные значения и присваивает их индексам массива, а в той части кода, которая ответственна за сортировку этого массива, да, она пока никак его не сортирует, но это уже след. проблема для решения. Мне бы понять, почему возникает переполнение, и причём не при каждом вызове программы.
У меня всё получилось! Я во всём разобрался и написал идеальный код для решения моей простенькой задачи! Спасибо всем неравнодушным сишникам, которые мне помогли в этом!!! УЁБКИ!!!!!
>>2577296 Ну я не разбирался во всех циклах. Но у тебя массив [10] это элементы 0...9 Зачем же тогда берешь остаток от деления на 11? Надо писать %10. Потому что только так ты получишь 0..9
>>2577308 Я пока не использую эту переменную. А так да, что-то косякнул!! Спасибо за наводку. Но ошибка явно не в этом. Ладно, можешь забить на ошибку - я вроде разобрался где она у меня возникала, но не понимаю почему так происходит, т.е., почему ошибка переполнения возникает не при каждом вызове? Косяк был в последнем вложенном цикле, в процедурке array, там при инициализации счётчика он равен равен счётчику основного цикла, а по ходу пробегания по массиву эта "вложенный" счётчик должен уменьшаться, а я применил операцию инкремента. Но почему в этом случае программа падала не каждый раз - я хз. Наверное, не каждый раз выполнялось условия активации вложенного счётчика. Надо проверить!
>>2577333 Может быть потому что у тебя int i = 0, в последнем цикле int j = i (= 0) и при этом ты обращаешься к (p + j - 1), т.е. вылезаешь до массива? Да и до этого, *(p + i - 1) при i == 0. Но повторюсь в таком коде мне лень копаться, я просто смотрю очевидные моменты.
>>2577361 Нет, не в этом дело! Если бы было в этом >*(p + i - 1) при i == 0 дело, то мне думается, что программа падала бы каждый раз, потому как это условие проверяется при каждом проходе, а вот в последний вложенный цикл программа заходит только в том, случае, если выполняется условие, которое может, при рандомном заполнении массива, не выполняться каждый раз.
>в таком коде
А поделись своим видением нормального кода. Что мне нужно подтянуть, чтобы писать удобоваримый для других людей код? Или пока не заморачиваться этим, потому что я пока постигаю эту науку, изучая по книгам и статейкам в тырнете, типа лучше для начала научиться решать задачки посложнее, освоить алгоритмы, а потом можно будет и красотой кода заморочиться? Или лучше сразу полезную привычку вырабатывать?
>>2577129 > Бтв, правильно ли я понимаю, что с точки зрения производительности лучшие решения 2 и 4, так как там дублирующихся действий? компилятор может оптимизирует, а может не оптимизирует, тут как карта ляжет с точки зрения производительности - скорее всего сразу считаешь во float и оптимизируешь формулу, удаляя лишние/прожорливые действия
>>2577124 Потому ты прекращаешь работу программы на первой итерации цикла. Понимание памяти здесь ни причём. В чём вообще задача состоит? Перевернуть строку?
>>2495049 (OP) Объясните несведущему совершенно в программировании ламеру, зачем нужен C, когда есть C++? В чем нюансы вообще? В чем их разница столь ключевая
>>2577921 > зачем нужен C, когда есть C++? В чем нюансы вообще? В чем их разница столь ключевая компилятор С есть на любом утюге сейчас пока продолжает появляться на любом утюге для новых устройств, плюсы - нет возможно в отдаленном светлом будущем будет только уже llvm со своим ir, под которое будет подгоняться все свежее железо
>>2578685 ну так-то си во многом хорош, если б не древние костыли, от которых не избавиться поэтому появляются всякие zig, v, чтобы оставаться в рамках c и его функционала и простоты понимания, но убирая всякие косяки и костыли прошлых лет
>>2578706 Так костылить начали в стандартах, если юзать чистый Си без этих нововведений, т.е. не использовать фичи из новых стандартов, то всё ок - Си выполняет свою задачу, как язык, который создавался на замену ассемблеру. А, если его использовать как высокоуровневый язык, то я ебал его маму рот - Пайтон в тыщу раз проще и интуитивнее, но, при этом, если юзать Пайтон, то всегда остаётся мысль о том, что ты нихера не шаришь то, как работает комп, т.е. для тебя всё это лютая магия; но с Си таких проблем нет - по мере погружения в этот язык, начинает прояснятся картинка в голове, плюс появляется способность читать код на Си, следовательно появляется возможность погрузиться в ядро линукса и начать понимать, как устроена ещё и ОСь, а за ней и как устроена и работает сеть. Вот этим этот язык и хорош - если хочешь понять устройство и принцип работы компа, а за ним понять и принципы устройства нашей цифровой цивилизации, то вежливо просимо в великий и могучий Си.
>>2578748 ну там он переезжал на рельсы аутофилляции, поэтому последние версии такие а по сложности там особо ничего нового сверх и нет, деферы, которые от Си уже просят уже как от С11, импорт вместо инклуда, так то же самое примерно, еще UB поменьше, так что особо не сильно
Месяц не заходил сюда и обосрался с драмы в треде. Спасибо вам за хорошее настроение, парни. Жаль, что в софтаче такого нет и там одни долбоебы остались. Вернусь через месяц, снова.
>>2579084 Есть. >>2578801 >на с89 пишем алгоритмы, числодробилки и либы, потом дергаем любым на вкус скриптовым языком Видишь, написано что это один человек, и на си пишет и на скриптах вперемешку. Так не бывает. Кто пишет на скриптах си не осилит, а кто пишет на си не будет писать на скриптах.
Налицо тупая скриптомакака которая пиздит. Считает, что если есть какие-то сишные либы которые можно дергать из скриптов, значит ЭТО МЫ ПИШЕМ НА СИ кудкудах. Короче, чухло приписывает себе чужие заслуги. Обычная тупая чернь, макакоскот скриптовый.
>>2579285 Блять, какой же долбоёб тут по треду прыгает!!! Просто пиздец!!! Долбоёб, нахуя тебе дёргать целые сишные либы, когда ты можешь дёргать результат, который получен на Си?
>>2579285 > кто пишет на си не будет писать на скриптах. Налицо тупая скриптомакака которая пиздит чел, я пишу на с, плюсах, расте, питоне, луа, js... для меня нет особой разницы на чем писать, я программист, скриптами я тоже пользуюсь внезапно, но чаще всего я пишу либы, чтобы тот, кто не программист просто дергал api этих либ через скриптовый язык или вообще интерфейс тебе так нравится, что тебя обоссывают всем тредом? )
Какой же си ахуенный язык это просто пиздец. Без шуток когда удается высрать функцию что проходит все тесты начинаю мастурбировать просматривая код своей программ
>>2576652 А что делать, если нужно изменить размер блока, но сохранить указатели на участки внутри него? Понятно, что можно вместо указателей хранить смещения, но я надеялся на что-то более приятное.
>>2580207 Depends. Может быть надо больше памяти выделять заранее. Может быть если у тебя указатели на что-то, то получается обычная куча, и неважно что она не непрерывная.
>>2580207 Открой спеки процессора и посмотри как он работает с адресами. Тогда и идиотских надежд не будет. Программирование это техника, а не религия с загадыванием желаний.
Как в линуксе на си/с++ отследить плаг анплаг эзернета? Пробовал через пул для /sys/.../carrier файла, но это чет не блокирующий вызов, я так понял из-за того что этот файл в виртуальной фс, че еще варианты есть кроме опроса по таймеру?
>>2584908 Что-то мне подсказывает что так не получится. Надо все равно MS Build Tools и Windows SDK качать, и clang. Или может быть кросскомпиляция MinGW из под cygwin? Короеч все выглядит большим гемором, чем студия. Может кто еще подскажет.
>Надо все равно MS Build Tools и Windows SDK качать, и clang А есть где пример? Хочу организовать это в vscode, без чего либо тяжеловесного. Скачал там плагин с плюсами, но он ест-но не видит всё что связано с винапи.
Почему в статье 13 и 14? Я правильно понимаю, что тут: 1)точки следования это ; и ; 2) присваивание у оператора присваивания это тот же побочный эффект что инкременты 3) получается побочный эффект присваивания может происходить до инкрементов, тогда в переменной будет 12?
>>2585086 Чел, чёт ты какую-то хуиту читаешь, потому что алгоритм тут следующий: 1) Переменной i присваивается значение 5; 2) К переменной i прибавляется единица; 3) К переменной i прибавляется единица; 4) Переменной i присваивается значение суммы двух переменных i, которая уже равна 7 после двух операций инкремента;
>>2584908 > Как можно собрать проект на си и винапи на винде? Не хочу качать студию. Есть где толковые примеры? В гугле все ссылаются на студию https://rsdn.org/article/baseserv/api32.xml когда уже освоите хотя бы гугл
>>2585096 >ты какую-то хуиту читаешь Или ты малость не шаришь. Черным по белому же написано, зависит от компилятора и моральной деградации его создателя.
>>2585176 Да, я после того, как написал псто, подумав, понял, что какой-нибудь уебан может написать компиллятор, который не будет соблюдать правильный приоритет операций.
>>2585203 Тут один еблан это ты, компиляторы пишут под стандарт, а не под то как тебе кажется это должно работать. А стандарт знать должен ты, чтобы понимать, что может выдать компилятор
>>2585294 А зачем же выпускать стандарт, который будет ломать всем привычную логику? А, еблан? Или, если тебе в тарелку наложить говна (настоящего человеческого говна), то ты не будешь сопротивляться и костерить повара, а начнёшь жрать говно, потому что оно подано тебе на тарелке?
>>2585612 >>2585539 Хуйню какую-то несёшь, стандарт не просто так написан, чем больше там операторов является точками следования, тем медленнее будет код. Ты натурально не понимаешь, поэтому несёшь хуйню, а делали это всё умные деды. Вообще лучше бы на мой вопрос ответили а не вот эти пуки пустые высирали
>>2586226 Ты вообще понимаешь, что происходит, когда твой погромисткий компилятор, написанный для стандарта, который создан погромистами, которые делают из Си высокоуровневый язык, чтобы следовать, по каким-то только им известным причинами, за модными тенденциями, лишая, при этом, Си своего плюса - zero runtime? Ты понимаешь, что то говно, которое ты защищаешь в этом выражении: i = ++i + ++i, чтобы получить 13 хранит одну и ту же переменную в разных местах и с разными значениями? Теперь, дурик, объясни мне - нахуя это вообще нужно? Нахуя ломать язык, единственные плюсы которого - скорость и возможность скомпилить его на утюге?
>>2586287 >чтобы получить 13 хранит одну Ты какую-то хуйню нафантазировал. У ++ и + просто один приоритет, они выполняются последовательно. А вот чтобы получить 14, нужно задать искусственный приоритет операций, несвойственный языку изначально.
>>2586287 Складываются не переменные, а значения, естественно они должны храниться. А у тебя какая-то шизанутая оптимизация: раз там указана переменная, значит работа только с переменной, а раз переменная только одна, значит и значение только одно - после всех вычислений. Это шизофазия. Не нужны такие ебанутые оптимизации вопреки здравому смыслу того что написано - выражения сложения.
>>2586483 >они выполняются последовательно >искусственный приоритет операций, несвойственный языку изначально Совсем пизданулся? То есть, ты хочешь сказать, что в этой реализации Си арность операций никак не влияет на её приоритет, да и вообще в этой реализации Си нет никаких приоритетов у операций? Это что же, если мы зададим такое условие: if (k + 1 <= k % 2), то оно будет true?
>>2586495 >естественно они должны храниться Что они? Значения? Ебанутый, как значение привязывается к переменной? >А у тебя какая-то шизанутая оптимизация Ебанутый, это не оптимизация, и тем более не моя, а работа компьютера! Значение переменной хранится в определённой ячейке памяти или регистре процессора, с которой (ячейкой памяти), или с которым (регистром процессора) происходит определённая работа.
Блять, такое ощущение, что не с сишниками разговариваешь, а с ебанутыми питонистами, которые проходят какой-то манякурс в скиллфактори или где ещё вы, блять, этого говна понабрались?
>>2586556 имеем: i=5; надо получить: i= ++i + ++i; смотрим по порядку: ++i какой значение? - 6 Всё, 14 уже не получится. Если в сях по стандарту это не выполняется, значит такой поеботой просто нельзя пользоваться, нечитаемый человеком код.
>>2586556 >Совсем пизданулся? То есть в твоем мире все инкременты в выражении должны выполняться до первой операции сложения? И что же тогда должно получиться в результате выражения: int i=5; i=++i + ++i + ++i + ++i; Но питонист тут я, да.
>>2586605 Блять, а это похоже вообще скрипто-вебмакака понабежала в тред! Просто пиздец!!!!
>i= ++i + ++i; >смотрим по порядку: >++i >какой значение? - 6 блять, ещё и неграмотная Тут надо, продолжить, долбоёб: >смотрим дальше >++i на твоём чурбекском языке продолжу >какой значение? - 7 >смотри по порядку дальше >+ >какой значение? - слева в выражении стоит переменная со значением 7, справа в выражении стоит переменная со значением 7, т.е. имеем два аргумента, которые являются значением одной и той же переменной, которая, блять, сука вы ёбанные дегенераты и уёбки, хранит своё значение в одной и той же ячейке памяти, в бинарной операции сложение, которые равны семи, так, сука ЁБАНЫЙ РОТ БЛЯДИ ВЫ ТУПОРЫЛЫЕ, какой значение присвоится переменной i, если сложить 7 и 7?
>>2586643 Ну так посчитай. Почему инкременты, имеющие больший приоритет, не выполняются в первую очередь? Как обосрался, так сразу ушел в троллинг тупостью?
>>2586648 >Почему инкременты, имеющие больший приоритет, не выполняются в первую очередь? Да, долбоёб, почему? Может помимо приоритета операций есть ещё и другие правила языка, допустим, которые говорят, что сложение есть бинарная операция, а, следовательно, если мы имеем уже два "готовых" аргумента, то их надо обязательно сложить? И кто тут обосрался, а, ебанашка ты, блять, питоническая?
>>2586636 Дальше смотреть не нужно, иначе получится, значение меняется в зависимости от записи последующих значений, это шизофазия, нечитаемый код, одно сплошное UB.
i=i+i это арифмерическое выражение оперирующее значениями, а не переменными. В данном случае i это лишь алиас для её значения, числа 5. Так устроен язык си, это обыкновенная запись по значению.
i=i+i эта запись вовсе не оперирует переменными, для того нужны указатели или ссылки, а тут запись по значению. То что опертор ++ увеличивает содержание переменной это побочный эффект, не относящийся к записанной арифметической операции. Арифметика происходит со значениями - анонимными числами, а вовсе не с переменными. Повторяю, для манипуляции переменными применяются указатели или ссылки.
>>2586659 >для манипуляции переменными применяются указатели или ссылки Чел, ебать ты очевидные вещи рассказываешь! Спасибо, конечно! Но, то что, ОКАЗЫВАЕТСЯ, БЛЯТЬ, мы единицу прибавляем не к самой, блять, переменной, чтобы не получить, блять, в арифметическом выражении i1, а к её значению, которое, ОКАЗЫВАЕТСЯ, БЛЯТЬ, хранится не в самой переменной, а, БЛЯТЬ, ОКАЗЫВАЕТСЯ, просто где-то в памяти, т.е. в какой-то ячейке памяти, на которую, ОКАЗЫВАЕТСЯ, БЛЯТЬ, указывает указатель (давай ещё затри мне, что указатель тоже хранится где-то в памяти), и таким образом...
Как эта вся дичь, что ты мне прогнал, объясняет то, что складывая две одинаковых величины (заметь, это не две одинаковые дробные величины), получаем нечётное число? Ваш этот ебучий стандарт и компиллятор погромисткий, блять, нарушают даже простые правила арифметики. Ты мне для начала этот ебантизм объясни, а потом уже, возможно, мы с тобой попытаемся объяснить тебе такие сложные материи, как указатели в языке программирования Си.
>>2586660 Ты тоже мне попытайся объяснить ебантизм, что я описал выше. А то ты, долбоёб питонический, даже не понимаешь, что такое арность операций. Хотя, если ты не понимаешь, что такое арность операций, то, блять, и не объяснишь мне ебантизм, что я описал выше. Поэтому просто, для начала, давай послушаем попытки этого 2586659 господина объясниться, а потом подумаем.
>>2586686 i=5; i= ++i + ++i; ++i :значение 6 + ++i :значение 7 i= 6+7 :значение 13 14 не получится никак. 14 может получиться, если это не значения, а ссылки на переменную, но тут нет ссылок, это запись по значению.
>>2586694 1) Что такое сложение в ЯПе Си? Сложение - это бинарная операция. 2) Что делает сложение в ЯПе Си? Сложение получает сумму двух аргументов. 3) Откуда берутся эти два аргумента? Они хранятся в ячейках памяти.
>это запись по значению Хорошо, давай проще: >++i :значение 6 Когда ты получил значение 6, куда ты сохранил это значение? Уже сразу присвоил переменной i, которая стоит слева от знака равно?
>>2586704 Я кажется понял корень проблемы этого треда: Кому-то из этого треда не помешало бы пройти курс низкоуровневого программирования. Чутка покодить на assembler и много вопросов и пустых мест в картинке о кодинге пропадут.
>>2586694 >>2586704 Я мимо шел, но в gcc получается 14. https://onlinegdb.com/GyauuOQJQ Если посмотреть дисассемблер в gdb, то там такоe выполняется: mov [rbp-0x4], 0x5 add [rbp-0x4], 0x1 add [rbp-0x4], 0x1 mov eax, [rbp-0x4], add eax, eax Надеюсь, разметка не сожрет. Но вроде и так все понятно, что в моем случае i хранится по одному адресу и все действия выполняются только над ним. gcc 6.3.0 если что
Ебать вы развели холивар по UB, а на практике в итоге это проверили какой-то залетный. Где-то полгода проверял эту хуйню на микроконтроллере, то есть все компилил арм компмлятором. Получалось 13, хотя на х86_64 всегда получалось 14 на прыщах, на винде тоже было 14, когда тестил в Visual Studio. Мб это уже устаревшая тема и почти везде это пофиксили, хз.
>>2586704 >Хорошо, давай проще: >>++i :значение 6 >Когда ты получил значение 6, куда ты сохранил это значение? Никуда, это забота компилятора, а не программиста куда там чего сохранять или нет. ++i естественно присваивает сразу переменной, но это не имеет значения для сложения, которое берет ЗНАЧЕНИЕ, а не ССЫЛКУ на переменную. Ты реально такой тупой, что не можешь отличить значение от ссылки? Значение берется компилятором и хранится где ему угодно, оно отвязано от переменной, главное, что оно уже не меняется, иначе арифметика перестает работать. Иначе получаются мутирующие значения в зависимост от дальнейших аргументов, это непредсказуемая шизофазия, а не код.
> Уже сразу присвоил переменной i, которая стоит слева от знака равно? Совсем того? Присвоение знаком равно идет результирующего значения, когда справа от знака равно всё посчитано. Компилятор может оптимизировать это как угодно, и присваивать хоть сразу, вообще поебать, потому что в первую очередь он должен генерить ПРАВИЛЬНЫЙ код, а только потом уже быстрый.
>>2585096 Нет, потому что алгоритм может быть таким: 1) Переменной i присваивается значение 5; 2) Первое слагаемое инкрементируется, теперь это 6; 3) Второе слагаемое инкрементируется, теперь это 7; 4) 6+7 = 14
>>2587247 >>2587106 Блять, поколение ЕГЭ, вам даже ассемблерную вставку вкинули, но вы, бляди питонические, высокоуровневые уёбки, продолжаете, объебашись незамерзайкой, писать какую-то хуиту. mov [rbp-0x4], 0x5 add [rbp-0x4], 0x1 - ебанашки питонические, вы здесь видите адрес, куда добавляется единица? add [rbp-0x4], 0x1 - а здесь, питонические уёбки, видите адрес? mov eax, [rbp-0x4] - тупорылейшие бляди, вы здесь видите, откуда берётся значение и куда добавляется??? add eax, eax - безмоглые хуесосы из поколения ЕГЭ, вы понимаете, что это всё значит?
>>2587257 > ассемблерную вставку вкинули Это баг компилятора, противоречащий синтаксису языка и здравому смыслу. Типичная багофича wontfix, которую приходится выучивать и обходить (не использовать такие конструкции) чтобы не уебаться об грабли.
Посмотрите на веруна, которому компилятор как библия, молится считая непогрешимым идеалом, своих мозгов-то нет.
>>2587257 Шиз, ассемблерная вставка - это когда ты сам на ассемблере код вставляешь. А стандарт с++ не говорит, какой ассемблер будет в результате в данном случае, и позволяет компилятору выдать такой код: mov ax, 0x5 add ax, 0x1 mov cx, ax add ax, 0x1 - ебанашка, увеличилось только второе слагаемое add ax, cx Обтекай.
>>2587286 Пфффф, я долбоёбам пол дня доказывал, что их погромисткий компилятор хранит значения одной и той же переменной в двух разных местах (в двух разных ячейках памяти, либо в двух разных регистрах) и только из-за этого, что их погромисткий компилятор занимает большую величину памяти, и получается в выражении i = ++i + ++i нечётное число, блять, один их этих уебанов, чтобы доказать мне, что их компиллятор не занимает доп. пространства и что он более оптимизированный, что это просто "последовательный", блять хуй пойми что, и чтобы доказать мне, что моя ассемблерная вставка неверна, приносит свою ассемблерную вставку, где чётко указано, что одно значение одной и той же переменной сначала хранится в регистре ах, а другое значение, блять, той же переменной, хранится в регистре сх, после чего два этих значения складываются.
Блять, этим дегенератам приносишь ассемблерную вставку, где переменная занимает один регистр, долбоёбы, приносят ассемблерную вставку, где эта переменная занимает уже два регистра, и, сука, говорят, что их код более оптимизированный...
Я в ахуе!! Это настолько толсто и дегенеративно, что мне, на самом деле, страшно, что у нас растёт вот ЭТО, и что вот ЭТО, пытается в язык программирования Си! ЭТО даже не пытается признать, что ОНО не право, ОНО просто приносит на похуй толстоту, и думает, что эта толстота прокатит!! Полный пиздец!!!!!!
>>2586146 > Когда уже начнёте читать а не кряхтеть? ты сам и не читал, открываешь блокнот, пишешь на си то, что там есть и получаешь итоговую прогу, компилишь тем же mingw
>>2588922 Ой блядь. 12 Переменная и побочные действия это разные вещи и побочные действия могут происходить в любом порядке. Значит первое побочное действие присваивание в i 5 + 5 и потом 2 инкремента
>>2588924 Как она может 12 выдать? Она двенадцать выдаст только в том случае, если приоритет операции у сложения двух аргументов будет выше, чем у инкримента, т.е. это, либо приоритет бинарных операций преобладает над приоритетом унарных операций, либо просто у только одного сложения приоритет выше, чем у инкримента. Но это не побочное действие, а правило, которое зашито в компилятор. Если ты пользуешься не шизо-компиляторами, а нормальным компилятором, то он никогда не выдаст ни 12-ти, ни 13-ти.
>>2589050 Если ты не будешь таким же тупорылым дегенератом, который доказывал, что его шизо-компилятор, который хранит одну и ту же переменную с разными значениями и в разных местах, лучше, чем gcc, то никаких подводных, потому что в любом случае обзаведёшься очень большим пакетом полезных знаний, которые сможешь применять где угодно, слегка модифицируя подход. Ядро это же база, от которой всё исходит.
>>2589041 Ещё раз блядь, у инкремента приоритет всегда выше чем у сложения. И он возвращает ровно то же число. То что число ещё и увеличится на 1 это побочный эффект. Приоритет у них не определен вообще. Присваивание это тоже побочный эффект. Поэтому инкременты дали 5, 5 + 5 равно 10. А затем происходит два инкремента
>>2589464 Чел, блять, как же вы меня уже заебали, сука, два долбоёба, блять!!!!! Кто определяет, что у унарных операций приоритет выше? Если у унарной операции приоритет выше, то как это всё, что ты описал, своими долбоибическими ручками, блять, с побочными эффектами и хуектами долбобоибического твоего мозга, может получится? Ты просматривал, хоть, блять, краешком своего долбоибисеского мозга те ассемблерные вставки, что кидали аноны? Блять, долбоёб, мы даже эти две ассемблерные вставки особо подробно разобрали для самых долбоибических владельцев самых долбоибических мозгов, сука!!!!
Сука, тварь тупорылая, ответь на простой вопрос - кто определяет приоритеты операций?
Всем привет, какие есть специальности в ВУЗах, после которых можно работать на АСУТП или программированием всяких микроконтроллеров на предприятиях, автоматизации процессов на всяких заводах и тд? такое есть вообще у нас? Например взять специальность "Программная инженерия", кто-нибудь знает за неё? Что там изучают и как программу вообще посмотреть?
>>2590331 > Бумеры такой простой вопрос неосилили чел, у меня mingw в папочке валяется и notepad++ и я пишу трехмерные приложения на си качать тут https://winlibs.com/
>>2590120 У меня "информатика и вычислительная техника" специальность называется, но ТАУ и железки в том или ином виде присутствуют. Это от специализации зависит уже.
Помогите с отладкой драйвера на винду(фильтр, не настоящее устройство). У меня он виснит на стадии deployment на target pc. win 10, vs studio 2019, wdk под вин 10 на обоих машинах стоит идентичная версия. На третьем скрине обозначил желтым ту область которая с ошибкой на первом пике. Что я делаю не так? Может в .inf файле что подредактировать. У меня там секции install и uninstall помечены как .NTamd64
Ну типа {Install.NTamd64] ну собсна такая платформа у системы на которой я тестирую драйвер и есть.
>>2592910 Я гуглил эту ошибку кстати, там написаны общие причины что типа повержденные файлы программы, недостающие файлы и т.д. перезапись в памяти процесса и т.д. Мне кажется что раз программа завершается из за вероятно недостатка каких-то данных, то там скорее всего в .inf файле какая-то хуета. Там этих версий и стандартнов под каждую версию ногу сломит. Может есть здесь опытный анон что драйвера пишет под винду, да поможет.
Мужыки, извините за дико тупой вопрос, но как понять в спеках (и других доках), какой тип значный/беззначный подразумевается в дескрипциях к полям по умолчанию? А то к некоторым полям указывается, что nonnegative number, но в остальнои большинстве говорится просто о 32битном значении.
Нужно удалить тестовый сертификат который выдан для драйвера на тестовом компьютере из store сертификатов в двух местах
certutil -f -delstore ROOT серийный номер сертификата certutil -f -delstore TrustedPublisher серийный номер сертификата
После этого все заебумба работает.
Написал, мало ли кому пригодится. А то в интернете на форуме у многих людей темы так и остались открытыми висеть на многие годы. Короче это сертификатная проблема, решается просто перепропиской тестового сертификата для драйвера в двух хранилищах.
сап, нужна помощь. Только изучаю С. В чем я не прав? Задача состоит в том, чтобы ввести двузначное число и помножить друг на друга его цифры. При запуске дает ввести число, но дальше прога просто выключается.
>>2594601 Хз, как этот долбоёб с отладчиком себе представляет то, что ты написал, но этот анон >>2594471 допустил явную ошибку по невнимательности, поэтому зря ты ему так просто подсказал, где он ошибся, - за такие тупые ошибки надо наказывать, пускай дрочится долго-долго. Либо, если невнимательный, то пускай уже сразу начинает изучать отладчик, тем более, скорее всего, этот анон изучает Си не под Линуксом, а в винде, следовательно, пускай накатит какую-нибудь идэешку со встроенным отладчиком и дрочит их (идэе с отладчиком) до опупения, пока сам не начнёт выявлять такие тупые ошибки.
>>2594619 Да дебагер вообще не нужен. Не нужно хуйни писать просто, ну или фиксить ошибки в программе методом пристального взгляда. Немногие это понимают.
>>2594540 & это операция взятия адреса переменной (или можно сказать ) Ты передавал переменную по значению. А эта функция подразумевает, что ты передаешь адрес переменной, в которую будет записан результат. Таким образом, она ожидает грубо говоря 0x612332b23, а ты ей передаешь 5 (или другой мусор, так как она неициализирована). Программа пишет данные по рандомному адресу, ОС ловит попытку записать вне разрешенной страницы и программа падает.
>>2596008 как меня заебали эти адепты кала под названием ооп, которые пытаются везде это впихнуть. Кстати видел как один человек на полном серьёзе говорил про инкапсуляцию в Си, и что хедеры можно интерфейсом считать..
>>2598005 Например я преувеличил(напиздел), чтобы показать неважность ооп. Да забей никому это ооп не нужно, вон там го, раст, zig какой-нибудь все они процедурные. Даже если эти языки что я и перечислили используются 1.5 людьми, это уже показатель что ооп языки щас никто новые не делает, ну какие там щас ооп языки в моде? C#, Java(которая уже вот-вот), все остальное уже мертво давно
>>2598022 Ты прав, но и ему скоро придёт конец я гарантирую, пузырь уже лопнул осталось немного подождать и скоро javascript разработчики будут получать не больше офисных
Привет! как вкатиться в разработку под микроконтроллеры? В физике я вообще не силён и не знаю, сильно ли она нужна, если нужна, то какие темы? По поводу самих микроконтроллеров, что лучше для начала выбрать? Спасибо!
Что использовать, если нужно написать компилятор для простого языка под x86_64? libopcodes дроч какой-то без нормальной документации, в capstone при возможности удобно дизассемблировать код НЕ ПОДВЕЗЛИ ВОЗМОЖНОСТЬ ЕГО АССЕМБЛИРОВАТЬ, ну как так блять? Пока приходит в голову только извращение с обёрткой функций с компилируемым кодом в форме inline assembly в какие-то макросы и дальнейшим его копированием без пролога/эпилога куда мне надо.
Ну так будет перекат или нет? Есть множество задачек, которые хочется обсудить, но боюсь, что в любой момент произойдёт перекат в треде и меня обделят вниманием. Поэтому как-то совсем не хочется активничать в этом треде.
Пожалуйста, пользуйтесь 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 помогает читать сложные сишные декларации.
Этот тред копия 01/08/19 Чтв 23:34:41 №1446278 с вебархива №47
Прошлые треды:
предыдущий тонет тут: https://2ch.hk/pr/res/2493863.html
https://arhivach.ng/