Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.Что читать:- 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://www.iso-9899.info/wiki/Books#Learning_CОнлайн-утилиты:- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.Прошлые треды:- №37: https://arhivach.ng/thread/414099/- №38: https://arhivach.ng/thread/419611/- №39: https://arhivach.ng/thread/423396/
Пацаны, есть адекватный алгоритм по созданию пятнашек на сишечке? Вообще с чего начать, хочу сделать сам для курсача, в гугле нашел уже готовый код, но я хочу понять и сделать сам.В принципе, что гуглить? Мб в каких-то книжках алгоритмы есть?
>>1351396>>1351358В общем, ожидая твоего ответа, успел сам уже склепать. https://pastebin.com/7uYq3NqHНикаких сторонних либ. (А код впрочем все равно говно)
>>1351396Сам алгоритм создания программы, с чего начать, как действовать, то что создать массив 4x4 и заполнить его 15 случайными числами я понимаю, а на счет реализации хз.
>>1351431>>1351396плюс еще вызывает вопросы одна вещь, расставлены числа в рандомном порядке и одна свободна, то есть перемещать число можно только на свободную позицию.
>>1351437Ля, совсем правила забыл. Перепилил. Только тут ты указываешь, куда смещается ноль (свободная позиция), но это не критично.https://pastebin.com/9uhB2wiFКак делал.Вспомнил правила (плохо вспомнил).Создал игровое поле. Подумал, как его заполнить. Решил не заморачиваться, а тупо по порядку поставить числа и затем случайные пары поменять местами 8 раз. Реализовал.Далее написал отладочный вывод поля. Проверил.Решил не заморачиваться с пользовательским вводом, и сделал быстро и на отъебись. Потом прикрутил сдвиг в зависимости от команды. Упихал все это в цикл. Написал проверку на конец игры. Если конец - цикл завершается.
>>1351431Создаешь массив и делаешь функции для перемещения чисел в этом массиве.Понятное дело что сначала надо разобраться с алгоритмом, т.е прикинуть куда что и как можно двигать. В каких случаях можно двигать, а в каких нельзя. Т.е сделать логику алгоритма пятнашек в максимально простом и упрощённом виде. А дальше уже думать над его интеграцией в язык и принять соответствующие поправки в алгоритм и провести оптимизацию с учётом возможностей языка. Может быть какие-то моменты будут труднореализуемые, а какие-то наоборот реализовать будет очень просто. При составлении любого алгоритма сначала его надо продумать на бумаге, без языка. Не надо зацикливаться на том что умеет язык, а что не умеет. Придумай законченный алгоритм и логику управления. Если ты изучал дискретные автоматы в универе, то примерно с таким же ходом рассуждений и строй алгоритмы. Чтобы они были максимально простые. А уже потом думай над реализацией. Если логика алгоритма сделана правильно, то и реализация будет несложной.
>>1351473>Если ты изучал дискретные автоматыЕсли не изучал, с чего начать? Можно ли вкатиться в алгоритмы сразу по Седжвику или нужно начинать с автоматов?Заканчиваю Прату читать, хочу ещё глубже.я другой анон
>>1351443Имей в виду, что ты не можешь просто заполнить поле рандомными числами.У поля есть алгебраическая чётность, и если ты поменяешь две позиции местами, то их невозможно будет собрать, т.к. чётность поменяется.
>>1351481Автоматы не надо. Это мне проще так просто. Если не изучал, то и не надо.Тебе с обычной дискретной математики лучше
>>1351603Некоторые алгоритмы значительно проще и понятней в рекурсивной записи. Если есть увереность что ресурсов хватит что можно спокойно рекурсии навернуть и не ебаться пытаясь придумать итеративный алгоритм (не всегда просто). Можешь, к примеру, попробывать quick sort реализовать итеративно. Сложного, конечно, ничего нет, но суть проблем можно уловить.
>>1351603Проблема не только в памяти, интерактивные алгоритмы работают, как минимум не медленнее, а чаще всего и быстрее.
Тут что-то про рекурсию должны кодеры в функциональщине раскидать. Ведь у них нет циклов как таковых. Алсо вопрос. Любой ли рекурсивный алгоритм можно переписать итеративно? И наоборот соотвественно.
>>1351606Понятное дело, что итеративный будет выглядеть более громоздким. Но он же будет и более эффективным. Рекурсивный выглядит красuво, но программирование ведь идёт ради результата, а не процесса.
>>1351517Спасибо.>обычной дискретной математикиНе, ну так-то у меня техвышка есть, просто хочу исполнить мечту детства и вкатиться в си.
>>1351615> Но он же будет и более эффективнымНет. Пруф: алгоритмы умножения Карацубы и Штрассена.К тому же, с оптимизацией хвостовой рекурсии рекурсивный алгоритм эквивалентен итеративному.
Как число(например 120) из массива int перенести в массив char?И вообще как записать число 120 в строку?
>>1351622>с оптимизацией хвостовой рекурсии рекурсивный алгоритм эквивалентен итеративномуОсталось только объяснить зачем в 99.9% задач использовать хвостовую рекурсию, если итеративный эквивалент уже есть.
>>1351628Блядь, не то имел ввиду.Начинай обрабатывать число с конца, и тогда:>запись начинай с последней цифры.
>>1351615В большинстве случаев результат это красивый и быстрый в написании и понимании код, а не ебля с бессмусленной эффективностью. Это если профилирование покажет что код сликом медленный (ну или ты точно знаешь что пришешь критический к времени выпонения код) тогда уже расчехляешь эффективность. Проблема скорее в том чтобы понимать когда рекурсия наглядней - рекурсивные алгоритмы не всегда проще итеративных. Плюс идиоматика - если в конретном языке/проекте все привыкли ебашить циклами, то совать рекурсию стоит очень осторожно.
>>1351625Дать чару указатель туда же куда и инт? Если не получится, прибавь sizeof(int)-1. Не получится ну и хер с ним.
>>1351634Просто к тому что вот если писать какие-то функции для небольших программ и говорить, мол, сделаю рекурсию, ведь памяти дохуя это одно. Но когда ты используешь это же самую функцию в большом проекте где эта рекурсия часто всплывает, да ещё есть и куча других рекурсивных алгоритмов, то это в конечном итоге экспоненциально увеличивает потребление памяти. Вон, многие жалуются на то что их баузер жрёт много памяти, может проблема растёт отсюда? Или другие программы.Я могу конечно хуйню нести, так как вещаю со своей колокольни, но мне это видится именно так
>>1351626Потому что его может и не быть. Например цепочка функций, каждая из которых вызывает следующую. Переписать итеративно может быть сложно, а тут компилятор всё сам заинлайнит, увидит хвостовую рекурсию и оптимизирует её. Или нет.
>>1351750Ты, конечно, хитрожоп, но он не получит от такого ожидаемого. Поскольку 5 символ в таблице символов != '5'. Тогда уж i+'0' писал бы.
>>1351625>Как число(например 120) из массива int перенести в массив char?>И вообще как записать число 120 в строку?Если с насыщением - то chararray = (char)(intarray>SCHAR_MAX?SCHAR_MAX: (intarray<SCHAR_MIN?SCHAR_MIN: intarray));
>>1351772Никогда не понимал, зачем так использовать тернарныйоэ оператор, получается же громоздкая ебота, легче на ифах написать и будет намного более понятно и красиво.если у тебя это один тернарный оператор — Окей, но когда у тебя один вложен в другой это ужас.
>>1351788> но когда у тебя один вложен в другой это ужасНа самом деле, тернарный оператор из-за его приоритета красиво чейнится, и все отлично читается. А вот так как у анона ставят скобки от незнания приоритетов, и такое действительно читать сложно.x = (expr1) ? res1 : (expr2) ? res2 : (expr3) ? res3 : res4;
>>1351788Не обращай внимания. Это называется ребенок-сосунок нашел новую игрушку, а возюкает её весь день подряд, всю обслюнявив от радости. Перебесится и пройдет или нет. но это уже терминал
>>1351628>>1351660>>1351665>>13517721)Делал через itoa, в итоге получилось только с цифрами(1-9), а, например, вместо числа 10...19 выдает 1, вместо 20...25 - 2. 2)Делал через функцию, возвращающую указатель делением на 10, выдает тоже самое(пикрелейтед)1) https://pastebin.com/6eB2U82V2) https://pastebin.com/nD0SwttJВ чем проблема?анон >>1351625
>>1351885Куда ты лезешь? Си это не скрипт, а низкоуровневый язык для обращения (фактически) напрямую к железу. Сначала разберись что такое простые числовые переменные и указатели, как работает память, как они в ней представлены. В строки лезь только потом, потому что строки это навороченное предыдущее, вдобавок с магией. Ты же лезешь в алгебру не понимая арифметику.
>>1351905Можно вообще написать такint a;char b;b = a;Компилятор будет ругаться, но операцию сделает. А ругается потому что в инт это 4 байти, а чар 1 байт и часть числа ты потеряешь, если в инте число больше 1 байта.
>>1351885char b[4] = ""; itoa(120, b, 10); printf("%s\n", b);В чем проблема JS мастер или питон гуру?
>>1351913А почему этот вариант не проходит? Зачем лишние телодвижения с битами делать? Вы ж всё равно не ужмёте 4 байта в 1.
Пытаюсь реализовать графы через структуру. Есть две структуры типа вершина и ребро. Правильно ли будет, если в структуре вершины сделать указатель на ребро с которым он соединён? А в структуре ребра сделать указатель на вершину, к которому он идёт? Или это пустая трата времени и надо сделать проще?
>>1352173Пустая трата времени, кроме случаев когда у тебя с ребром связана куча информации и тебе необходимы манипуляции над ними по типу взять конкретное ребро в одной части графа и переместить в другую. Но мне сложно представить где это может понадобиться. Алсо при таком подходе твое ребро получается просто специфическим классом вершины - такое ребро это вершина которая может быть связана только с двумя "настоящми" вершинами (олин радитель и один потомок).
>>1352203Я делаю так.В вершине указатель показывает на адрес исходящих ребер. В ребрах - адреса куда они ведут. Т.е в принципе списочная структура получается. Можно ребра не делать вообще, а показывать связи только между нодами. И веса там же делать, но это то же самое получается почти как по мне.В общем не знаю. Таким способом просто хочу закрепить навыки применения разных фич языка. Но как дело доходит до реализации различных алгоритмов для модели, то тут пока ещё всё не очень.
>>1352281> но это то же самое получаетсяТоже самое, только без лишней сущности (ребра). Делая ребро отдельным ты ничего не выиграваешь, только лишнийуказатель заводишь.>И веса там же делатьВес ребра это по факту свойство ноды. Это не ребро такое охуенное что у него такой вес. Это нода такая что у нее есть ребро с таким-то весом.Выделять ребра в отдельную сущность может быть смысл если у тебя с ребром связано много дополнительной информации, и количество ребер у каждой ноды может самое разное. Тогда ты заводишь в ноде массив и туда складываешь нужное количество ребер (ссылок на них). Что-то типа префиксного дерева.
>>1352368Да это и так легко запомнить.Ещё вотint m = malloc(5 sizeof m);int n[5];Эти строчки эквивалентны.И вот ещё(m+3) или m[3]n[3] или *(n+3)тоже эквивалентны
>>1352420Неэквивалентны, выделять память на стеке и на куче это не одно и тоже.Алсо:Можно и так, но не нужно, хы.n[3]=★(n+3)=★(3+n)=3[n]
>>1352484Какой смысл в 2019 использовать си? Разве что под микроконтроллеры пишешь, но там нет выбора, а где он есть, нет смысла себя ограничивать.
Си без знания плюсов, сейчас актуален? И будет ли дальше таковым? Выкатываюсь из бэка на питоне в низкоуровневое и пытаюсь понять куда грести
>>1352557А что не так с ним? Скобки не обязательны же, просто желательны для читаемости.>>1352565> тождественно?Нет. Второе - выражение, и у него есть значение. Если возьмешь tcc или gcc с -O0, то они будут считать && (в том числе конвертить результат вызова функции в int), чтобы сразу после этого его тупо выбросить. Хотя нормальные компиляторы соптимизируют, конечно. Ну и, естественно, если функция возвращает void, то второй варинт вообще не скомпилируется.
>>1352447Но ведь на cs50 сказали что одно и то же. Да и массивы в си это указатель ведь с выделенным диапазоном памяти.
>>1352420Вообще неэквивалентны. Садись, два.>>1352677Не сказали, говорили о другом, просто ты неправильно понял.
>>1352682Но ведь если я выделю таким образом память, то смогу обращаться к нему через m[0] или m[2], т.е обращаться к любому его члену. И проводить те же самые операции как если бы я объявил его в виде массива.Так почему не эквивалентны? Где можно увидеть разницу?
>>1352686Пока что единственное отличие то что дебагер показывает массив как массив, а указатель только первый элемент.
>>1352686Ладно, понял что в первом случае делается куча, а во втором стек. Их расположение разное, но в целом работают почти одинаково.
>>1352559Сынок, будущее за робототехникой, так что затолкай свой скриптовой язык глубоко себе в анал и пиздуй на хуй отсюда-->
>>1352751В авто все пишут на джаве. В авиации и критических областях используют всякие Ады, на дырявой сишке никто в здравом уме руками такое писать не будет.
А как хранить данные, что бы данные в программе после обработки моих функций оставались в физическом состоянии навсегда?То есть не в ОЗУ на 1 процесс, а как база данных. Только через File?Но как тогда хранить разные типы данных?
>>1352809> Но как тогда хранить разные типы данных?типданных данные;fwrite(&данные, sizeof(данные), 1, fp);
Опытные товарищи, утешьте советом. У меня дипломная работа по булевым сетям (нахождения аттрактора). Стоит ли катать такое дело на любимой Сишечке, или себе дешевле вспомнить кресты?
>>1352694Ага, почти одинаково (за исключением того, что между ними нет ничего общего). Читай дальше, k&r скачай.
>>1352841Язык программирования, как и любую другую технологию, можно рассматривать минимум с двух сторон: "сверху-вниз" (лингвистика, т.е. собсно язык, синтаксис, вот это все) и "снизу-вверх" (реализация). Виртуальная машина, на которой запускается байт-код, и браузерный интпретатор, который парсит скрипт, это принципиально разные вещи, и буковки в названии тут ни к чему. Но для серьезной робототехники шо то хуйня, шо это хуйня. Виртуальная прослойка между софтом и реальной архитектурой со всякими сборщиками мусора и прочим гавном - это ни разу не про системы реального времени.
>>1352849Я вообще-то того джависта хотел жирно потроллить, а ты взял и всю малину испортил. Но не суть. Если ты робототехник, то поясни за аппаратную часть роботов. Какие двиганы обычно используются? Как запитываются, какие аккумы? Какая трансмиссия для двиганов используется, если используется вообще?
>>1352562Зачем тебе знание расширенного си чтобы писать на си? Да и вообще современный крест уже мало общего имеет с 89-99 стандартами сиши, вот до-диез — это да — тупо сишка расширенная
>>1352865>современный крест уже мало общего имеет с 89-99 стандартами сишиЧурбан у тебя на плечах имеет мало общего с интеллектом.
>>1352839Узнал что к стеку обращение идент быстрее чем к куче, плюс не факт что в куче будет ещё нужный участок памяти.Но пока не заметил разницу когда использовал ту и другую запись. Всё ещё не понимаю в чём они так разительно отличаются, если можно и к тому и другому обращаться через m[n]. Если нужен динамический массив, то использую маллок, плюс ему можно делать реаллок в случае чего и прочее, что нельзя делать с обычным массивом.
>>1352852У меня диплом бакалавра и вот в этом году будет диплом магистра по специальности мехатроника и робототехника.Но всё ещё не знаю про сабж. Единственное что помню из курса связанное с роботами это расчет кинематики через матричные преобразования. Думаю там используются синхронные движки с постоянным магнитом pmsm или как их там. Ну или другие, с возможностью регулирования положения. Но точно не шаговые, даже в чпу их уже не юзают. Каждая степень свободы регулируется собственным движком, в старых роботах типа тур-10, который стоит у нас в лаборатории, используется цепной привод, а движки стоят у основания. На сочленениях стоят силомоментные датчики или что-то вроде этого. Про аккумуляторы не могу ничего сказать. Судя по всему, если их и используют, то с расчетом на то что он сможет выдержать нагрузку от частотного преобразователя.
>>1352928> обращение Это выделение массива на стеке быстрее. А время обращения к стеку и куче одинаковое. Ну максимум первый хит в массив на куче может быть слегка дороже, но потом данные все равно в кэш попадут.> чём они так разительно отличаютсяВыделение массива на стеке - это что-то уровня sub esp,размер (одна инструкция, иногда две). Выделение массива в куче - десятки инструкций в самом лучшем случае (если у аллокатора в пуле блоков есть пустые слоты подходящего размера). Алсо, у массива на стеке и указателя на динамически выделенную область памяти разные типы, банально sizeof вернет разные размеры.>>1352938Вы эту школу второй тред упоминаете. Это какой-то локальный CS50 или просто урюпинская СОШ, где начали учить сишку?
>>1353092>Вы эту школу второй тред упоминаетеПричем тут это, чувак задания из школы шлет. Значит он там щас учится в бассейне и просит решений
>>1353110Я так понимаю, стек создаётся при компиляции программы. Т.е при первом запуске программы он выделяет фиксированный участок памяти для явно заданных переменных и программа не будет потреблять меньше этого диапазона. Но может потреблять больше, если мы будем выделять память в куче.
>>1352686Для тебя - программиста laba1 с видоса ютуба, эквивалентны. Объяснять таким бесполезно, если начнешь писать настоящие программы, сам сразу поймешь разницу, а раз не видишь, значит и нет её.
>>1353321Тебя еще вчера послали читать к&р, хуль ты тут мозги ебешь? Это самые основы, еще попроси объяснить тебе, что такое функция или указатель, и в ответ на резонное "пошел нахуй" возрази "не можешь объяснить значит сам не знаешь))0)"другой
Поясните плез нубу, для чего в этих строках эти %c%c%c%c?fprintf(fp_out, "DATA%c%c%c%c", 4, 0, 0, 0);fprintf(fp_out, "%c%c%c%c", 9, 0, 0, 0);
>>1353349Да. Куча это свободная на машине оперативная память. А стек физически тоже находится в оперативной памяти, но он считается зарезервированным самой программой. Ну, как я понял.
>>1353353Местные "сеньоры" не могут иначе. Ввиду своей ущербности они показывают таким образом своё превосходство над другими дабы потешить чсв.
>>1353372Когда определяешь обычную переменную например, то она находится в стеке. А когда указатель и ему прописываешь маллок, то в куче.
>>1353358Если человек не может нагуглить элементарных вещей, то ему не место в этом треде. Это тред про си, а не про обучение программированию детей с дефектами развития.
>>1353379>>1353401Собственно, что и требовалось доказать. Оскорбления, посылы нахуй. Вот это вот всё.
>>1353414Двачую бля. Какие то токсичные челики тут сидят. В cpp-треде меня никто не оскорблял никогда, а тут сразу после первого же вопроса.
>>1353492>В cpp-треде меня никто не оскорблял никогдатолько руководствуясь принципом "не тронь говно".
>>1353414Съеби в /soc обсуждать свои трудные отношения с обществом, тут тред о программировании на си.
>>1353338> для чего в этих строках эти %c%c%c%c?Видимо, кто-то собирался параметры для этих %с изменять динамически, чтобы в файле было DATA и 8 каких-то байт (сейчас 04 00 00 00 09 00 00 00). А если константы, как сейчас, можно было прямо в строку за-escape-ить: "DATA\0x04\x00\x00\x00\0x09\0x00\0x00\x00" и писать fwrite-ом.>>1353492У нас обычно тоже мирно, но иногда набегают неадекватные дети.
Правильно реализовал стек? Для калькулятора с польской записью хочу сделатьhttps://pastebin.com/NS1Hb4xJ
>>1353639Норм, но если бы делал empty ascending, не пришлось бы инициализировать sp. И еще в Си в пустых скобках void пишут, это тебе не кресты.
>>1353654>Норм, но если бы делал empty ascendingВ любом случае пришлось бы иметь указатель на вершину. К слову sp не нужен, если я в нулевом элементе буду хранить его, т.к туда не записывается ничего. Почему бы и нет собственною
>>1353605Вот да, кстати, замечал, что чем меньше у человека опыта в какой-либо технологии / каком-либо ЯП, тем неадекватнее он себя ведет в соответствующих тредах. Речь, разумеется, идет о тех, кто в принципе позволяет себе подобное поведение.мимо другой анонАлсо, подкиньте, пожалуйста, годной литры по Cmake, ну или скажите, хватит ли мне "mastering cmake"? Книжка вроде относительно толстая, а времени на освоение не так много, за вечер до базового уровня подтянуть надо.
Сделал последнее задание первой главы K&R; Пришлось немножко попердеть, но я справился (наверное). Делюсь решением:https://pastebin.com/fzJWvZvM
>>1353700>напишите программу проверки синтаксиса С>какой-то пиздецКакая задача, такое и решение. Пиздец пиздецу идеально подходит.
>>1352909Выводит цифры до 789? Кому не похуй что он делает, если он выглядит как говно?Унеси это говно отсюда и съеби в ньюфаг тред со своими задачками
>>1353795Вроде понимаю надо выписывать чаром, остаток от деления числа с конца на 10 и тд., но что не складывается
>>1353804Тебе нужно узнать какой char соотвествует 0, какой 1 и т.д. и отправлять их, а не просто цифры 0,1 и т.д.
>>1353811Хм, то-ли я и в правду ебанутый, то-ли меня не правильно понимают, бряк. Вот есть int= 16; (0x10) представим что нету принтф() но есть putchar(), и как мне напечатать десятичное, используя лишь эту последовательность битов.
>>1353814Там вроде нужно линковать на уровне сборки, или короче добавь в main.c include`ы getop, getch, stack
>>13538141) Собираешь в IDE, не научившись (видимо) собирать вручную.2) Не видишь полного лога сборки (видимо, предыдущая вкладка?).3) Либо не линкуешься к stack.o, либо не собирается stack.c, либо функции в stack.c объявлены как static, либо у них другие имена.>>1353819x = 16;while (x) {putchar('0' + (x % 10));x = x / 10;}Только это выведет задом наперед. Можешь, например, не выводить числа сразу, а класть их в массив, и потом выводить массив с конца. Или класть в стек. Алсо, при x == 0 ничего не выведет, это тоже нужно обработать.
>>1353835Тебе прямо в задании намекнули, что полноценное решение может быть очень и очень сложным. Например:char c[] = "test\test";или#define RBRACE }while (1) { RBRACE
>>1353819Бляяя, куда ты лезешь? Это не сценарная хуйня. Вообще не лезь в подобные алгоритмы до того как узнаешь о типах данных, выкинь это нахуй. Вот нахуя тебе принтф если ты не ебешь чем отличается чар от инт? Принтф это путчар с перделками — форматированием аутпута.
>>1353814Написано же "неопределенная ссылка на push и pop", компилятор не знает что это такое. Ищи в каком файле эти функции и включай его в свой main.c
>>1353832Добавил, но тогда вообще странная фигня получается, цифры в консоли не вводятся, а стоит ввести букву сразу выдает ошибку, даже без нажатия ввода.>>1353840>Собираешь в IDE, не научившись (видимо) собирать вручную.Ну, в книге эта тема не затрагивалась> Не видишь полного лога сборки (видимо, предыдущая вкладка?).Ты про Build log? Там написано тоже самое>Либо не линкуешься к stack.o, либо не собирается stack.c, либо функции в stack.c объявлены как static, либо у них другие имена.Так, что такое stack.o? Как statick ничего не объявлено, да и имена те же
>>1353855>Принтф это путчар с перделкамиТы кретин, а он всё понимает и правильно задает вопрос, просто ленивое хуйло и не хочет сам думать/делать.
>>1353875Бля ты тупой или что? Сходи поскроль хедер принтфа и нахуй тоже. Принтф выводит посимвольно ВСЕ что ты в него задашь, кроме того на что ссылается %. И своего друга с глупыми вопросами тоже забери.
Как скомпелировать lua в tcc? Расскажите полную последовательность действий.Вот берем мы исходники lua https://www.lua.org/ftp/lua-5.3.5.tar.gzПотом берем tcc http://download.savannah.gnu.org/releases/tinycc/tcc-0.9.27-win32-bin.zipЧто дальше делаем?
>>1353873Я не спец, но простым языком; для объединения фйлов в одну программу тебе нужно либо слинковать файлы(все кроме того где main()) при сборке в твоей IDE, либо вставляя include`ами друг в друга>>1353889Я и спрашивал как он печатает то что в %, int например. Этот анон >>1353840 уже помог.
>>1353910...ну то-есть не нужно инклудить все файлы друг в друга, можешь например в главном файле вставить нужные.
>>1353897> Что дальше делаем?дальше делаешь make linux testЕсли у тебя какой-то популярный дистрибьютив, и не нужны какие-то необычные флаги (или вообще модифицированый код) то лучше поискать готовые пакеты в репозиториях.
>>1353889>кроме того на что ссылается %Сообразил? Вот и славно. Только в следующий раз СНАЧАЛА думай, а потом хлебало разевай, а не наоборот как тут вышло.
>>1353913А если надо без всяких make, liux и mingw, чисто чтобы понять как в tcc под win32 компилировать свои будущие охуительные проекты на примере сборки lua?
>>1353897>Как скомпелировать lua в tcc>в tccА можно? У меня сложилось впечатление, что tcc это игрушечная хуйнюшка, которой только собственные хелловорлды можно собрать. Твой исходник луа под какой компилер выложен, мм?
>>1353937Я попробовал по совету отсюда https://www.lua.org/manual/5.3/readme.html#othertcc lua.c lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c loadlib.c linit.cВроде скомпилилось в один файл lua.exe без ошибок. Всё правильно сделал?
>>1353931> компилировать свои будущие охуительные проекты на примере сборки Парень, поверь, если ты не представляешь как скомпилировать свою лабу, то не стоит вскрывать эту тему. Не знаю что там конкретно у луа, но скорее всего сборка там представляет собой тысячи строк отборной скрипто дрисни (учитывая что это кроссплатформа).Выйди на улицу, прогуляйся, подыши свежим воздухом, обдумай свою жизнь. Потом отрывайй документацию по своему компилятору и разбирайся как откомпилировать один файл. Потом два. Потом как линкануть библиотеку. Там понемногу переползай на make или что-то подобное. А там уже можешь начинать (понемногу) читать сборочные скрипты крупных проектов.> без всяких makeНикак. Система сборки может быть встроена в ide, можно не использовать конкретно make, но вручную ты усрешся компилировать что-то крупное.
>>1353873> Ну, в книге эта тема не затрагиваласьА что за книга? В целом, ты просто открываешь консоль, идешь в директорию с проектом, и говоришь gcc main.c stack.c calc.c getop.c (если gcc в path нет, указываешь полный путь).> Так, что такое stack.o?Программу можно собирать либо по файлу, явно компилируя файл за файлом в объектные файлы (сс stack.c -o stack.o), а потом линкером собирать их в исполняемый, либо можно скормить все файлы компилятору сразу (как я показывал выше), а он сам вызовет линкер. IDE обычно компилируют по отдельности.Можешь выложить куда-нибудь все файлы проекта?>>1353944> но вручную ты усрешся компилировать что-то крупное.Но с Lua у него внезапно получилось. Как так-то?
>>1353958> <Unit filename="main.c">> <Option compilerVar="CC" />> </Unit>И это все. Ты файлы в проект не добавил. Поищи там Project->Add files или правой кнопкой в панели проекта. Или я хуй знаю, как в этих ваших кодеблоксах сказать компиляторы, чтобы он компилировал.> Керниган Ритчи жеТам в Getting started рассказывали про компиляцию из консоли. Не из под винды правда, но подход везде одинаков.
>>1353955Ну там проблемы (при компиляции) в основном из-за зависимостей (особенно системных библиотек/вызовов). А луа походу нихуя не левого тянет поэтому и компилировать нет никаких проблем - закинул исходники и все. Плюс размер небольшой - раздельная компиляция не нужна.
>>1353966Тоже думал там полно зависимостей как обычно, вот и не соберешь, а оно вот как. Везение новичков, лол?
>>1353954>Но с Lua у него внезапно получилось. Как так-то? TCC очень простой, экстремально примитивный, там даже линкера нет. С любым нормальным компилятором вручную обосрешься пердолиться.
>>1354056> там даже линкера нетКак нет? tcc -c foo.c -o foo.o && tcc foo.o bar.c вполне работает. И вообще, это все же компилятор, никто не мешает ld дергать, если нужно что-то более сложное.> С любым нормальным компилятором вручную обосрешься пердолиться. Небольшие проекты, если им сделать ./configure или руками config.h сделать вменяемый, достаточно часто успешно собираются cc *.c без всяких мэйкфайлов. Если не собираются, это либо какие-нибудь извращения (например, fossil, там внешний препроцессор дергается), либо просто код сложный, зависящий от ключей компилятора и т. п.
>>1354075>Как нет? В смысле для тебя нет, просто пишешь tcc main.c и он выплевывает экзешник. Ни про какие опции, объектные файлы, линкеры ты и не узнаешь даже что они существуют.
>>1354088> просто пишешь tcc main.c и он выплевывает экзешникПросто пишешь gcc main.c и он выплевывает экзешник.
>>1351181 (OP)Объясните, зачем нужна лестница из else-ifif ( ) { }else if ( ) { }else if ( ) { }else if ( ) { }else { };если можно послать всех нахуй и сделать лестницу из одних if, которая будет делать тоже самое?if ( ) { };if ( ) { };if ( ) { };
>>1354211Будет, но не всегда.if-else подразумевает выполнение только одного из блоков.Много if могут выполниться все.В зависимости от того, что ты за условия даёшь, конечно.
>>1354211Если условия не взаимоисключающие, то нихуя не то же самое. Вот если return в теле, то ок, но все равно желательно не нарушать логическую структуру.
>>1354417Во-первых, связные списки не нужны. Просто хуяришь массивы и не паришься. Во-вторых, они небезопасны.
>>1354211Допустим, есть x равное 3;if (x > 3), то дать тебе пиздыelse if (x < 5), то дать пизды твоему соседуНикто из вас не получит пиздыif (x > 3), то дать тебе пиздыif (x < 5), то дать пизды твоему соседуТвой сосед получит пиздыВ конечном итоге лично ты не получишь пизды, поэтому можешь делать, как тебе нравится
>>1353966Ещё вот так можно скомпилировать.tcc -rdynamic -shared -o lua.dll lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c lbitlib.c lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c lutf8lib.c loadlib.c linit.ctcc lua.c lua.defПолучается жирная библиотека lua.dll и крохотный lua.exe
>>1354490В условиях 3 на 2 поменяй, я тупанул малёхо братишка. Ну и пизды получишь ты оба раза, а сосед один раз
>>1354424> Просто хуяришь массивы и не паришьсяИ раздвигаешь массив при вставке. Хороший системный язык.> они небезопасныТак Java уже есть. И связные списки там реализуются за десять строк.>>1354449Собери с -fsanitize=address, и тебе скажут, где именно ты его ломаешь.
>>1354489Шиндоус 7, MinGW. Примерно на 11-12 реаллоке массива (увеличиваю на два элемента) куча идет по пизде и все падает. Видимо, неправильно использую все же.
>>1354576>Видимо, неправильно использую все же>ВидимоКомпьютер не ошибается, он в точности выполняет что ты пишешь. Значит, если что-то падает - 100% ты накосячил. Вбей это сразу в свою тупую кочерыжку, иначе так и останешься необучаемым на всю жизнь.
>>1354596Уже переписал. Вот, вспомнил и проверил - оно блять работает нормально! Но ей-богу, точно такой же код падал!>>1354601Да я понимаю, что я виноват. Но realloc heap corruption таки гуглится, и просто так sigtrap в отладчике внутри реаллока не срабатывает, хотя бряки я не ставил.
>>1354614Там выше глобально объявлен он. Ну и под комментом - как именно.>>1354619Как сделать лучше? >>1354622У меня тоже. Но точно такой-же код в другой программе - нет.
>>1354627> Как сделать лучше?Проверять результат realloc(), например. Выделять в realloc() с запасом побольше (150%, например). Если нет острой необходимости в том, чтобы весь массив описывал один только указатель, лучше явно хранить количество выделенных с запасом и количество использованных элементов. Можно еще отказаться от malloc() тоже, раз размер фиксированный, и хранить не массив указателей, а массив 256-байтовых массиов. Хотя это спорно и зависит от того, как этот arr применяется.
Тут по сути идет дурацкая эмуляция списка массивом.И передавать в функцию массив по значению - жирно.
>>1354791Забавно, спасибо.>>1354878Дебилы это одна из разновидностей человека, как и умные, но такое обобщение никому не нужно.
Хай, вкатываюсь в программирование, напишите, где тут у вас найти гайды по плюсам. Тред не нашел. нуфаг, листва.
Можно ли как-то прочитать прямо из консоли уже напечатанное и копировать в свой буфер. Пробую так: "fscanf(stdout, "%s", e);" , но как понимаю он читает только промежуточный буфер?
>>1355150Нельзя. stdout ведет себе какfopen ("/dev/tty", "w"); // "/dev/tty" заменить на нужноеfscanf на другом уровне абстракции работает и не имеет дела до подкапотной реализации всяких буферов-хуюферов. Для тебя это стрим в одну сторону.
>>1355150Может быть такой вариантmemcpy (mybufferblyat, stdout->_base, stdout->_cnt);Но опираться на местную реализацию FILE - не вполне разумно.
>>1355162а зачем, собсно, промежуточный буфер?fwrite (ukazatel, sizeof (bukva), skolkobukov, stdout);
>>1355178Ну, обработчик ошибок - это ведь функция, которая вызывается, когда прилетает SIGTERM (ctrl+C), SIGSEGV (segment naebnulsa) или что-то в этом роде. Или это не то?
>>1355182Я наверно ляпнул что-то не то. У меня просто обёрнутый принтом exit() который я вставляю в забагованом месте и отлаживаюсь принтом в эррор.тхт файл.
>>1355184Отладочный лог обычно через stderr выводится. Там без задержек все. Чтоб в файл текло, надо запускать ./sverhproga 2>эррор.тхт
Есть последовательность байтов, вытащенная в хекс-редакторе. Например.27 00 00 13 26 20 3A 3FЯ знаю, что там запакованы данные. Как распаковать? Какие алгоритмы использовать?
>>1355212У меня 3F 80 повторяется в некоторых последовательностях записей.На пикче две последовательности. В файле, который я ковыряю, меняется только расположение элемента по координатной оси. Когда растет X, длина последовательности записей увеличивается, то есть первая пикча - это элемент сильнее сдвинут по оси Х.
>>1355223> У меня 3F 80 повторяется в некоторых последовательностях записей.Ну вот это, например, флоаты, little endian. 0x3f800000 = 1.0f. Возьми себе редактор типа 010, который умеет показывать выделенные байты в различных представлениях.
Зашёл в тред и очутился на форумах девяностых. Вы чё, совсем ебобо? Кто-то реально пишет щас на этом говне?
>>1355547в 90х в россии на bbs сидели, избранные имели доступ к зеркалам nntpрассвет интернет-форумов в россии - это начало нулевых вообще толюди сидели в своих домовых локалках, на шарах и ирке, и имели пару гигов интернета на выход в большой мирно откуда тебе это знать
>>1355496Мой редактор умеет показывать в разных представлениях. Только все равно непонятно, как данные пакуются
>>1355591Начнем с того, что рунета просто не было, или читаешь зарубежные сайты на английском или нахуй идешь. Но такой проблемы не стояло, потому что у рюско-быдла не было компьютеров, а интернета и подавно.
>>1355630В смысле, почему оно именно этими байтами представлено, или ты хочешь, чтобы мы отреверсили для тебя формат по скриншотам?
>>1355635Нет, мне непонятен сам принцип упаковки. Как из какой то длинной последовательности байтов получается более короткая? Причем короткая будет разной длины в зависимости от входных данных.
>>1355638Ты бы рассказал, что за файл, что за данные. Какие нахуй последовательности? Это кейфреймы анимации что ли? Почему ты решил, что там что-то упаковывается, если флоаты торчат голой жопой? Сдампи в человекочитаемый вид для начала:fseek(fp, офсет, SEEK_SET);struct { uint16_t a; uint16_t b; float c; } smth[24];fread(smth, sizeof(smth), 1, fp);for (j = 0; j < sizeof(smth) / sizeof(smth[0]); j++) {printf("%d: %.4x %.4x %g\n", j, smth[j].a, smth[j].b, smth[j].c);}И уже ищи закономерности. Никакого магического решения не существует, нужно думать. Алсо, другие части файла тоже могут иметь значение. Можешь взять kaitai struct или темплейты в том же 010 editor и документировать известные поля, например.
>>1355650Нахуй ты зелёному отвечаешь, у него гигабайтные сетки на ирке стояли и аплоады по 26кбпс в 95-ом в его воображении
>>1355646Короче, мне уже кое что известно об устройстве этого файла. Данные есть в интернете. Но пресловутая структура практически не описана. Сказано лишь, что она представляет из себя последовательность записей по 8 байт. Похоже, она отвечает за текстуры поверхности, именно за привязку кусочков текстур к вершинам. Я получаю структуры, закрашивая разные вершины (или клетки) поверхности ландшафта в игровом редакторе. Одну клетку закрашиваю и потом смотрю, что добавилось в hex-редакторе.Почему появилась мысль о том, что данные запакованы?Во первых, часть данных в этом файле уже была запакована. Других данных, не этих. Распаковывал, используя готовую утилиту, там уже все до меня было сделано.Во вторых, очень странное поведение. Когда я крашу ближе к началу координат, структура получается очень короткая, всего 8 байт. Когда крашу квадратик ближе к середине или другому краю, то записей становится дохуя, как на пикче выше. Это необязательно значит, что данные запакованы, но такие мысли возникают.И вот я теперь думаю, что либо эти записи запакованы, и данные о координатах вершин запрятаны, либо в этих записях не записаны координаты вершин напрямую, и текстурки к вершинам привязываются как то по другому.Upd: пока писал, обнаружил, что последний байт 3F как то связан с интенсивностью цвета текстуры. Потому что когда перезаписал на 3E, то в редакторе она поблекла. То есть видимо данные все таки не запакованы.
Коротко:glib-ский tdestroy из <search.h> не освобождает память. ЧЗХ??Длинно:Здарова, аноны-сишники. Я к вам не с пустыми руками.Тонна гавнокода...https://pastebin.com/WTCxAaJE...приятного аппетита (кто не голоден - 71я строка)Итак, проблема. Решил наскоро смастерить реализацию ROBDD. Тест на соответствие возвращаемых значений исходной таблице истинности проходится успешно. Глянул в диспетчере, сколько оперативки кушает это чудо, и охуел. Мегабайтаж явно не соответствует числу узлов диаграммы, проверено сверхмозгом, принтэфился из-под капота. Тем же суперметодом было установлено, что после вызова tdestroy (derevoblya), где dereveblya - собсно, дерево, в которое добавлен, на минуточку, не один миллион уникальных элементов, так вот, после вызова tdestroy памяти освобождается ровно... нихуя, а, как я полагаю, один узел - это минимум три qword-указателя плюс еще что-то. Что делать то, епт?P.S. любопытных прошу не ругать за костыль с bdd_cmp. Я знаю, что для concurrent-safe работы надо как-то с каждым вызовом полный адрес ей доставить, но не стал ебать себе голову.
>>1355989> tdelete() frees the memory required for the node in the tree. The user is responsible for freeing the memory for the corresponding data.
>>1355991хм.. у меня другая инфа> tdelete() deletes an item from the tree. Its arguments are the same as for tsearch().стало быть, якась хуйня, а вот:> tdestroy() removes the whole tree pointed to by root, freeing all resources allocated by the tsearch() function. For the data in each tree node the function free_node is called. The pointer to the data is passed as the argument to the function. If no such work is necessary, free_node must point to a function doing nothing.выглядит как то, что надо
>>1355991>>1355994упс, про frees the memory required for the node уже вычитал, но это неинтересно. Я и не хочу удалять corresponding data, я лишь хочу сам скелет дерева выбросить.
>>1355996> Я и не хочу удалять corresponding data, я лишь хочу сам скелет дерева выбросить.Ну так он у тебя удаляется у тебя не освобождается (и скорее всего течет) corresponding data (malloc на 61 строке). Если твой алгоритм позволяет попробуй вместо того malloc подставлять просто ссылку на какой-то один буфер (для всего дерева). И посмотри на ситуацию с памятью.
>>135600361 строка находится не во вложенной рекурсивно крутящейся функции, а выполняется лишь раз за весь вызов, а потом только reallo-чится. Там не утечка, там именно tdestroy сломалась, которая по идее должна распускать за ненадобностью дерево, используемое лишь в процессе выполнения алгоритма построения диаграммы, но на деле ни мегабайта не возвращется. Проверено getchar-ом до и после в обнимку с system monitor (линуксовый диспетчер задач)
>>1356008Ну тогда хуй знает. Есть вариант вилкой чистить. Начинаешь с самого просто примера с деревом. Убеждаешся что с памятью все ок. Потом начинаешь постепенно превращать его в свой код, как можно меньшими шажками, пока не начнется хуйня. Если стркутура позволяет то лучше конечно бинарным поиском - добавляешь примерно половину кода, если все ок, добавляешь половину оставшегося, если не ок - убираешь половину вставленого. Если действительно с tdelete() проблема то это баг дохуя.
>>1356038ко ко ко пидорчто по больному, да?небось тебе уже 40+ а ти баб не ебал ещо?с батей уже трахался?как он в попец?мамка твоя ничо так
>>1356042понимаю, делать нехуй, но.. чувак, ты реально скучный вариант выбрал, технари не церковники, на такую толстоту не ведутся. Ну, вот >>1356038 один повелся, да, но такая скудная еда даже полминуты постинга твоего высера не стоит
>>1356029Таки да, самый простой пример благополучно выявил поломку glib-овского чудо-дерева. Так и знал, что самому придется дерево писать. Люблю Си...
>>1355974> Это необязательно значит, что данные запакованы, но такие мысли возникают.Возникают мысли, что оно взяло максимальные x/y закрашенные, побило прямоугольник {0, 0, max_x, max_y} на квадратики или треугольники и хранит для них пиксельные координаты или что-то подобное (вон я выше код кидал, переменные a и b), ну и интенсивность. > обнаружил, что последний байт 3F как то связан с интенсивностью цвета текстурыОхуеть, ты изменил флоат 1.0 на 0.25, и что-то уменьшилось. Внезапно, правда?
>>1356029>>1356057Ага, зацените, как на багзилле на отъебись ответили. Однако, посылать нахуй таких ответчиков - то еще удовольствие. Не зря мать уроки по инглишу оплачивала.
>>1356029>>1356057Ага, зацените, как на багзилле на отъебись ответили. Однако, посылать нахуй таких ответчиков - то еще удовольствие. Не зря мать уроки по инглишу оплачивала.https://sourceware.org/bugzilla/show_bug.cgi?id=24271
>>1356103То есть последние 4 байта отвечают за интенсивность. Выглядит вполне правдоподобно.Я вчера ещё выяснил, что первые 2 байта, а может и 4 даже, отвечают за расположение закрашиваемого квадратика. То есть вроде бы получилось расшифровать. Теперь осталось только выяснить, зачем он создаёт много этих 8-байтных текстур, если красить далеко от начала координат.
>>1356215Погоди, твоя проблема лишь в том, что менеджер кучи не отдает ОС память, а придерживает ее для себя, и тебе это не нравится?
>>1356229>менеджер кучи не отдает ОС память, а придерживает ее для себяПрям завоняло 15-рублевыми оправдателями андроида и дрисни 10:- Почему у меня вся память занята, хотя ничего не запущено?- СИСТЕМЕ ВИДНЕЕ, ОНА ДЛЯ ТВОЕЙ ЖЕ ПОЛЬЗЫ РЕЗЕРВИРУЕТ, НАХУЯ ТЫ ПОКУПАЛ ПАМЯТЬ, ЧТОБЫ ОНА ПУСТОВАЛА? РАЗ ЗАНЯТА, ЗНАЧИТ ТАК НУЖНО, НЕ ТЕБЕ ХОЛОПУ СЮДА ЛЕЗТЬ!
>>1356229Полгига "для моего же блага"? Неее, не имеет права, шел бы он нахуй с такими премудростями. free, кстати, в таком говне не замечен. Отдает мегабайты, как миленький, все до единого, по любой мелочи. Это tdestroy в manpages раскудахтался на обещания все ресурсы из под дерева распустить, а на деле нихуя не высвобождается.
>>1356252> Почему у меня вся память занятаВытеснена в своп, лежит, есть не просит.> СИСТЕМЕ ВИДНЕЕЭто не система. Линкуйся с другим аллокатором, можешь хоть на каждый освобожденный байт делать сисколлы. И похуй, что они теперь еще дороже стали из-за багфиксов для x86.
>>1356264> free, кстати, в таком говне не замеченТак в tdestroy и нет ничего, кроме вызова твоей функции для освобождения данных и обычного free() для каждого узла. Такие дела.Алсо, у тебя там вообще скорее всего проблема с фрагментацией: ты выделяешь ноду, потом выделяешь данные для нее, повторяешь много раз, и выделение скорее всего идет из одного и того же пула. А когда ты освободишь дерево, получается последовательность блоков free-used-free-used-free-used, где used - это данные, которые ты не освободил. И вот пока ты вот с этими used ничего не сделаешь, никакая магия тебе память в систему не отдаст, даже если ты очень захочешь. Можешь проверить это, выделяя данные пожирнее, например, по 128 байт на узел, чтобы гарантированно использовался другой пул. Если картина изменится, можешь пофиксить это, например, выделяя данные заранее, а потом уже вторым проходом складывая в дерево.
>>1356271Там узлы дерева выходят втрижды жирнее самих данных, а данные-то пакуются в один массив, который целиком reallo-чится по +килобайту по каждом переполнении.
Есть какая-то единая книжка в которой описан си от самых низов до работы с памятью и такимТакая чтоб страниц на 700-900
а есть гарантия, что секвенс поинты будут строго как написано в кода выполняться? то есть, если я буду писать в память и вызывать функцию, которая читает её - это ещё понятно. а что если у меня другой поток читает? например считывает статус выполнения какой-то операции.
>>1356518Точки следования говорят, когда закончится вычисление выражения. Они никак не гарантируют тебе видимость сайд-эффектов извне: ни то, что результат попадет из регистра в память, ни то, что одно выражение выполнится раньше другого, если у них нет зависимости по данным. И уж тем более оно никак не гарантирует, что соседний поток это все увидит. И даже если ты расставишь везде volatile, чтобы компилятор не ленился писать в память, есть еще такая страшная штука, как memory ordering, и что там у тебя будет происходить с данными, запишутся ли они сразу в память, или запись пойдет в кэш и будет отложена, и увидит ли это соседний процессор и т. д. - про все это Си для обычных переменных не дает тебе никаких гарантий, все целиком и полностью зависит от платформы. Поэтому не выделывайся, бери C11 и используй атомики, для них компилятор будет проделывать все необходимые пляски с бубном.
>>1356523ну в общем я так и думал, что нужно писать асм и оборачивать в функции. на моей платформе нет атомиков.
>>1356560Почему компилятор нормально воспринимает функцию, int f(double const ⋆x), но ругается на int f(double const ⋆⋆x)?Как передать компилятору ⋆⋆x и объяснить, что в функции не должны изменяться ни указатели на ⋆x[...], ни элементы x[...][...]?
>>1356669> ругается на int f(double const ⋆⋆x)Как ругается? Несовпадение типов, потому что ты передаешь массив указателей на неконстантные даблы? Касти, такое автоматически не приводится.> объяснить, что в функции не должны изменяться ни указатели на ⋆x[...], ни элементы x[...]Тебе нужен массив константных указателей (нельзя изменять укащатели) на константные даблы (нельзя изменять данные). Вот и записываешь: const double ⋆const array[], но у тебя указатель вместо массива, правишь и получаешь const double ⋆const ⋆x.
>>1356678Аналогичное предупреждение:note: expected ‘const unsigned int const’ but argument is of type ‘unsigned int ’Но суть примерно понял, сейчас поугадываю, как передать. Спасибо.
>>1356680Без каста никак, не пытайся. Автоматическое втыкание квалификаторов поддерживает максимум один уровень косвенности, у тебя два.
пиздос, передоз си в крови. Сейчас секунд 10 искренне пытался вспомнить, где я проебал указатель на вилку, лежащую передо мной на столе. алсо, чем анализировать код, чтобы всякие тонкости не проебывать? мозг имеет свойство сбоить после всего-то двух-трех дней без сна, поэтому не всегда вариантpvs-studio знаю и пользовал, интересны альтернативы
Анонче у вас тоже так, в общем дня не можете провести без C? Как будто подрочить, обязательно нужно какую то хуйню написать и ебать себе мозг решением проблемы и когда решаешь то кончаешь?
#include <stdio.h>int main(void){ int i, j, list[10]; for (i = 1; i < 10; i++) { list = 2 * i + 3; for (j = 1; j <= i; j++) printf("%d\n", list[j]); } return 0;}Почему из-за ескейпа \n ломается луп и не обновляет значение j ?
>>1357292В смысле ищи свою проблему где-то еще. Я хуй знаю, зачем ты это делаешь, но этот код делает именно то, что в нем написано.
>>1357347Что он делает? Он выводит массивы со случайными значениями, хотя это не так, там определенные значения должны быть.У меня когда в принте %d\n выводит мусор, а когда отделяю %d от \n то сразу все становится на свои места и j обновляет значение и луп работает как надо.
>>1357353> со случайными значениямиНет, оно выводит вот эти твои последовательности нечетных чисел, начиная с пяти. Ну это если макаба на самом деле сожрала [i] в выражении list[i] = 2 * i + 3.> У меня когда в принте %d\n выводит мусорУ тебя компилятор сломался, скачай другой.
>>1357353>>1357366О, я догадался. Ты делаешь что-то типа printf("%d ", ...); printf("\n"), и так как ты не можешь в фигурные скобки, второй принтф попадает во внешний цикл, а не во внутренний, и у тебя получаются красивые строчки чисел, а не один непонятный столбец. Так?
>>1357369Нет, все в столбец. Там даже когда как ты сказал все равно будет столбец, ибо \n срабатывает каждый луп, поэтому строчка и так и так будет. Проблема в том, что компилятор по моему сломан, ибо почему то когда спецификатор %d с \n сочетаешь в одной функций printf, то вывод ломается, либо разные адреса печатает, либо вообще не инкрементирует.
Если присвоить указателю адрес некой переменной, можно ли потом прибавить к нему какое либо число, чтобы он стал указывать на другую переменную?
>>1357567В Си нету магии. Адрес это просто целое число, к которому можно прибавить (или отнять) другое целое число.
>>1357421Нет, дело в компиляторе было. Я тупой еблан, кодил на ночь, прошу прощения за мозгоебство, в следующий раз буду писать на свежую голову. Сам себя запутал, я думал что вывод557Это ошибка, и думал правильно будет557В виде пирамиды. В общем тупой долбоеб.
>>1357596>кодил на ночь>кодилВсё равно что насыпать сахару в чай и размешать, а потом говорить "я готовил".
>>1357591Я не спорю, я спрашиваю можно ли таким прибавлением случайно попасть в адрес другой переменной
>>1357601> можно ли таким прибавлением случайно попастьМожно. https://ideone.com/ijeBN3 Но делать так не стоит. Обращения за пределы объектов в памяти - undefined behavior.
>>1357601Разумеется можно, но толку нет, ты закосячишь программу непредсказуемым образом (коррупция памяти), ведь нет гарантий расположения переменных относительно друг друга.
>>1351181 (OP)По ссылке [http://www.iso-9899.info/wiki/Books#Learning_C] у ОПа>Stuff that should be avoided:>Understanding and Using C Pointers by Richard M. Reese: Horribly written, conflates language specification and implementation, and describes concepts confusingly and/or wrongly in many cases.
>>1357793Если будет тяжело, то читери как сука.На гитхабе есть готовые решения, задания на бассейн не меняются годами.Гуглить github piscine 42.
Как в CRC32 предварительно вычисляются таблицы? Не те, которые полные и занимают 4гб памяти, а те, например, что на 256 значений.
>>1357893Мы в курсе. И про хардвей тоже. Но плохие книги тоже нужно читать.>>1357934Ну погугли painless guide to crc32. В целом, суть в том, что CRС32 - это длинное деление (в столбик, как в школе), только вместо обычного вычитания там xor, и еще тебя не интересует частное, только остаток. И ты можешь либо ксорить побитово, либо можешь заметить, что то, с чем поксорится "текущий" остаток после n итераций, полностью определяется следующим n-битовым словом. Ну и ты берешь вот это слово, и для каждого его возможного значения гоняешь побитовую версию crc32, получаешь табличку.
>>1357947>плохие книги тоже нужно читатьесли ты уже знаешь что и куда, даалсо, где достать MISRA C:2012? на либгене только 2004
Почему если убрать размер строки у t, то программа вылетает?#include <stdio.h>int main(){ char s[100]= "test string"; char t[100] = "stroka"; strcat(s,t); printf("%s",s); return 0;}void strcat(char s, char t){ while(s++ !='\0'); s--; while(s++=*t++);}
>>1358020Посмотрел видео.Как правильно записывать поинетры?int pointerAge = &age;int pAge = &age;Или какой другой вариант?
>>1358151Например, в glib в объявлениях функций имена параметров указателей кончаются на p. Вообще, сишный стиль краткий, если хотя бы посмотреть на имена тех же функций стандартной библиотеки strcmp, memcmp и т.д., так что pointer явно длинновато, максимум ptr.
>>1358185> сишный стиль краткий, если хотя бы посмотреть на имена тех же функций стандартной библиотекиНе надо на них смотреть. Все это делалось в те времена, когда количество значимых символов в именах было дико ограничено, чтобы экономить память и время компиляции, поэтому ребята крутились как могли и писали вот эти нечитаемые strpbrk.
Можно ли в С создать указатель на функцию и передать этому указателю функцию с определенными аргументами, а потом вызвать эту функцию через указатель не указываю аргументов?
>>1358191в этом случае пишут еще одну функцию обертку, в которой игнорируются входные параметры, а вместо их подставляются сохраненные значения внутри этой функциина с++ обычно пишут функтор, в котором сохранение состояния выражается более явно
>>1358191Нет. Максимум ты можешь добиться такого с помощью кодогенерации в рантайме (libffi или jit какой-нибудь), но насколько кроссплатформенно это будет - зависит от того, как ты это будешь делать. С другой стороны, ты явно хочешь чего-то странного. Ты можешь, например, сделать так, чтобы твоя функция вместо нескольких аргументов функция принимала один указатель на структуру или на массив с аргументами. Тогда ты сможешь сделать что-нибудь типа struct { void (∗func)(void ∗args); void ∗args; void ∗result; } myfunc = { ... }, и потом сделать какой-нибудь callfunc(&myfunc);
>>1358191Нужна библиотека GNU libffcall с помощью alloc_callback можно вроде как такое сделать, я правда не пробывал никогдаhttp://www.gnu.org/software/libffcall/callback.htmlЕще есть екстеншен под clang который добавляет "блоки", но это нужно устанавливать llvm, clang и потом само libblocksruntime-devhttps://en.wikipedia.org/wiki/Blocks_(C_language_extension)
Я не понимаю что такое llvm и как он работает. Как он связан с асмом и машинным кодом? Что это вообще?
>>1358299Вместо того чтобы компилить сразу в машинные коды, код сначала превращается в какой-то промежуточный вид, а потом из него компилиться в машинный код для конкретной системы. Если у тебя есть 10 языков и 5 систем, если ты хочешь использовать их все на всех системах - тебе прийдется написать 50 компиляторов. А с таким подходом тебе нужно 10 компиляторов с языков высокого уровня в промежуточный вид, и пять компиляторов с промежуточного в машинные коды конкретной системы.
>>1358372> код сначала превращается в какой-то промежуточный видНа самом деле так делает любой серьезный компилятор, просто у LLVM байткод стандартизирован, документирован и опубликован. И еще его можно в таком виде таскать, тогда как обычно у компиляторов промежуточное представление живёт в лучшем случае до линковки.
>>1351181 (OP)Спрошу тута.Посоветуйте деревенщине годное что-нибудь по системному программированию под *nix. А то под венду вагон туторов по ддлкам, мультитредингу и всему такому, а то под никсами я только fork() знаю.
>>1351181 (OP)анон, есть сорсы какой-то хитрой большой сишной либы, там куча кого-то говна, каких-то монструозных мэйкфайлов и прочего (в чем по слову говно можно было понять я не шарю) - можно как-то без боли (хаха) для нуба это всё скомпилировать и пройтись по интересующим меня кускам в дебагере? иде там какие-то годные для этого люди используют или как вообще?
>>1358644Попробуй "Искусство программирования под Unix".Книг так-то достаточно, мог бы сам загуглить и начать читать.Алсо туторы для дебилов.
>>1358648В нормальных либах есть файл с инфой по установке, дебажить можешь подсосавшись GDB, например.
>>1358652ну вот к сожалению нету, на сайте либы пишут что проще всего устанавливать - скачать пакеты вашего дистра.сука, ну неужели по-человечески никак это не делается? не первый раз такая ситуация, не понимаю блеа как вообще дебажить большие чужие либы, как это нахер всё собирается...
>>1358650Ну туторы по какому-нибудь WinAPI дело хорошее. Понял основы и закапываешься в MSDN. А потом плачешь от кривости устройства своей программыМимо
>>1358656Ну почитай что там в install пишут, вообще монструозные мейкфайлы нужны чтобы ты мог просто написать make install и все ок если повезет. У тебя проблема в том что ты дебажить хочешь - тоесть тебе нужны тыблицы символов - скорее всего прийдется править мейкфайлы, если они не предусмотрели удобного флага для компиляции. Есть возможность где-то нагуглить уже готовые таблицы под твою библиотеку (если она распространенная) тогда можно попробывать скачать готовый пакет + таблицы. Естественно там куча проблем (вродже того что должны совпадать версии компилятора).
>>1358713Ты так говоришь> править мейкфайлыкак будто положить -g и -O0 в CFLAGS - это занятие на целый вечер.
1.На чем писать на винде2.посоветуйте книжку для новичка,но чтобы не совсем как с маленькимзаранее спасибо
Парни, есть задание. Надо написать программу для вычисления значения функции f(x) в точке x с помощью ряда Тейлора в окружности точки x0 = 0 . Для функции f(x)= ln (x^2)-x+1 при x=1.5
>>1359522Привет, ты че охуел? Тебе эту задачу дали чтобы ты ее сам решил. Формулы все есть, осталось только написать пару строк кода.
Анон, есть годная книга, цикл-статей, что угодно по написанию компиляторов/интерпретаторов на Си? Modern compiler implementation in С c тигром пойдёт?
>>1359563Есть даже книга по написанию компиляторов Си на Си: https://sites.google.com/site/lccretargetablecompiler/
Здарова, низкоуровневые аноны. У меня дипломная работа с булевыми сетями. Уже был тут с вопросом, стоит ли для такой математически сложной задачи перекатиться на кресты, или нет причин дергаться и можно спокойно на любимой Сишечке осилить. А теперь у меня возникла мысль... не удобнее ли будет на FORTRAN всю эту симуляцию и алгоритмы пилить? Треда по Форту нет, по сему зашел сюда.
>>1359812собсно, вопрос к тем, кто с имел дело с FORTRAN и может сказать, для чего он удобнее, а для чего нет.
>>1359812>Уже был тут с вопросом, стоит ли для такой математически сложной задачи перекатиться на крестыПодозреваю, что ты пилишь такой говнокод, что похуй>не удобнее ли будет на FORTRAN всю эту симуляцию и алгоритмы пилитьНет.Форт и фортран разные языки.Удобнее взять python и numba.
>>1359812>не удобнее ли будет на FORTRAN всю эту симуляцию и алгоритмы пилить? Треда по Форту нет, по сему зашел сюдаАнон, Форт и Фортран это разные языки, есличо. Очень-очень разные.
>>1359828>>1359863> Форт и Фортран разные языкиНе знал про Форт, поэтому когда увидел где-то это название, подумал, что речь про Фортран (ласковое сокращение). Я таки имею ввиду не Форт.
>>1359866Скорее всего, самый рациональный вариант.Просто думал, что раз Си был придуман для байтоебства (разработка ОС), а FORTRAN для матана (научные вычисления), то последний может оказаться удобнее. До сих пор меня клинило исключительно на Си, так что перекат в любом случае будет болезненным, а олдскул мне как-то больше по душе. Хотя, может и вправду "этот ваш" Python такой легкоусвояемый-мощновозможностный-проектопозахватуземлипригодный...
>>1359879Вся математика нынче пилится на питоне, там либ ёбнешься сколько, то что ты на си напишешь строчек за 200, на питоне займет 10.Если ты оэлдэ-извращенец юзай фортран, но я бы взял питон, он реально простой, тем более если ты не изучаешь язык, а пилишь на нем конкретный проект.
>>1359879>Скорее всего, самый рациональный вариант.Самый рациональный вариант использовать вуз для освоения технологий, которые пригодятся в дальнейшем. И "Я бы на твоем месте не выебывался и писал на том на чем умеешь." - это хорошо для бизнеса, а не для диплома.Поэтому бери python+numba. Освоишь, заодно и код на сишке будешь писать менее говнокодистый.Фортран первый высокоуровневный язык, на нем много научных вычислений просто из-за того, что их дохуя написали за полвека его существования. Но сам язык хуевый.
>>1359924>И "Я бы на твоем месте не выебывался и писал на том на чем умеешь." - это хорошо для бизнеса, а не для диплома.Как говорил брус ли - надо боятся не того кто написал 100 строк на 100 языках, а того кто написал 1000000 строк на 1 языке.
НУБО_ВОПРОСint array[4][8];...func(array);Что в данном случае передётся в функцию? Ну всымсле НЁХ/поинтер(если поинтер то на что?)?
>>1359978>1000000 строк на 1 языке.И потом он будет преподовать в ненавистном ВУЗике ненавситным студентам и продолжать фапать на фортран. Действительно, страшно.
>>1359989На фортран фапают олды, они как раз на нем считали свой матан, примерно до появления си. Фортнайт фортран они осилили, а си уже нет. Им щас как раз 70-80 лет и они преподают.
>>1359991Си для матана не подходит. Язык, в котором даже не проверяется выход за пределы массива, это маразм.
>>1359998Наверное поэтому "местные НИИ" такое дно над которым только насмехаются, хуже чем жарить бургеры в макдаке.
>>1359994> Язык, в котором даже не проверяется выход за пределы массива, это маразм. Что мешает написать структуру либо использовать написанное до тебя?
>>1360001Ну тебе видней с дивана, а пока крылатые ракеты в сирии летают и танчики стреляют на твоей кукареку всем пофиг.
>>1360055>крылатые ракеты в сирииА потом сами же и ноете, что бабахи вас терроризируют. Вроде программисты тут, а с логикой на "вы".
>>1360008И в языке тоже. Сброд, не способный даже выбрать язык для своей работы, это идиоты, а идиоты не могут ничего хорошего произвести, вот и находятся на дне как и заслужили.Если что, настоящие ученые используют питон, как самый удобный для любых экспериментов. А в продакшен они ничего не делают, так что производительность им не важна совершенно.>>1360014Вопрос был в языке подходящем для матана, а не в языке в котором можно навилосипедить что угодно. Пердолик головного мозга, который вместо работы лепит велосипеды, даже не приступая к собственно работе, это еблан, просирающий время впустую, вдобавок шизло, подменяющее настоящую цель раболты на свой манямирок велосипедов.
>>1360058Непонятно ты тупой или так тралишь.Одно дело ученые в говне моченые, другое дело двачер который собрался лезть в другой язык для написания дипломной работы.
>>1360067А дипломная работа это что? Продукт на рынок или макет показать что алгоритм работает? Мне кажется, второе, именно этим занимаются ученые.
>>1360072Так ты не тралишь. Разница в том что ты собираешься одну работу сделать или заниматься этим, те не разовая работа. Проведу доступную тебе аналогию либо ты работаешь перфоратором каждый день тк ты строитель, либо ты учишься работать перфоратором для того чтобы сделать 1 дырку.
>>1360089Дипломы сдают в ВУЗе, это учебное заведение ученых, при них там ученые клубы, в которые студент может прямо перейти далее работать, либо не захочет и сваливает, получив корочку, которую требуют на работе. Но на работе корочка это формальность, а на самом дел таме требуют совсем другие знания, которые ты учишь самостоятельно.
>>1360108Че ты несешь вообще, даун? Какой работодатель, какой диплом? Речь была про то чтобы лезть в другой язык ради дипломной работы. Земля тебе пухом, долбоеб.
>>1360093>пробел является синтаксической единицей>для тупой обезьяны это слишком сложная концепция ведь пробелы невидимы>ПЛАХОЙ ИЗЫК, РЯ!
>>1360109>язык ради дипломной работы>ты строитель, либо ты учишься работать перфораторомГде связь, имбецил?Диплом = ВУЗ = ученые.Строитель = работа = работа, дебил, ферштейн?
Сап Сисачь, у меня такой вопрос - есть приложение, у этого приложения есть ресурсы (картинки звуки текст в своих директориях) как заставить в коде искать их тупо в той же папке где и это приложение? То есть что бы не статичные пути при компиляции какие то вбивать, а что бы вот как у бинарников фаирфокса с сайта - их можно распокавать в любое удобное место (/opt/firefox предположим) симлинкнуть бинарий в /usr/local/bin и оно работает апдейтится. На Си вообще так можно сделать?get_pwd просто рабочую директорию выводит а не ту в которой придложения как я понял так что не предлагать
>>1360111А разве в современных Иде для питона нет возможности поставить отображение спейсов символами? В виде ещё с древнейших версий это можно сделать, поэтому хз почему это в си треде у кого-то багор должно вызывать
>>1359986Численно - адрес первого элемента массива в памяти (т.е., (uintptr_t) &array[0][0]), тип - int (∗)[8], т.е., указатель на массив из 8 интов.>>1359990Нет, ты не прав, автоматически к указателю преобразуется только один (первый) уровень массива: массив из 4 массивов из 8 интов -> указатель на массив из 8 интов.>>1360156> как заставить в коде искать их тупо в той же папке где и это приложениеНу получай путь до себя (readlink("/proc/self/exe")), иди до первого слеша с конца строки, втыкай вместо него '\0'. Естественно, если там хардлинки вместо симлинков, то так не прокатит. Но не делай хардлинки, вот и все. Алсо, лучше вытащи это в отдельную функцию и сделай кроссплатформенно: на винде GetModuleFileName(NULL) есть для того же.
>>1360063Аналогично. Сейчас бы он попробовал на питончике покодить, скажем, расчет погоды это просто пример на кластере с использованием GPU. Удачи ему в этом.
>>1360219> втыкай вместо него '\0'Пиздец так то подход, даже не понял вначале нахуй оно нужно пока в твоем посте подсказку не увидел оказывается в си так строку рубят, впрочем что еще ждать от С99Путь взял из argv[0] /proc решение не кросплатформенное и даже в никсах отличается, для винды свой отдельный уродливый #ifdef, хардлинков в программе нигде не валяется вроде, а если всмысле кому-то понадобится сделать хардлинк на бинарник то это уже похуй.Благодарю.
>>1360219А это, еще такой вопрос почему переменная со строкой не скрещается?fn_to_call(path"/img.png");path инициализирована через char path[256]; догадываюсь что она типа массив и так просто его записывать в строку нельзя, но я видел в некоторых примерах что так записывабт иногда. Или это только когда константой в хидере прописано и компилятором автоматически подставляется, а так вообще нельзя?
>>1360273> Путь взял из argv[0]Ты же сам писал про симлинки. В argv будет симлинк, а не настоящий файл. Алсо, в argv[0] может быть что угодно, включая неполный путь или вообще какой-нибудь мусор: https://ideone.com/NWijmR>>1360280> почему переменная со строкой не скрещаетсяВ Си нет строк. Есть массивы char, заканчивающиеся \0, которые по соглашению используются вместо строк. В них же разворачиваются и строковые литералы. А чтобы объединить два массива придумали всяческие strcat(), а также циклы или memcpy на худой конец. Тебе strcat() вполне подойдет, например.> видел в некоторых примерах что так записывабт иногдаАвтоматически (на этапе компиляции) склеиваются только литералы. Делают, например, так:#define PREFIX "Hello, "puts(PREFIX "world!") но это потому, что оно развернется в puts("Hello, " "world!"); и литералы склеятся.
>>1360372он зароскомнадзорен>>1360373Серьезно? Ты даже поиск освоить не можешь, может не надо тебе программирование?
>>1360332Вот зачем ты спросил? Как мне теперь с этим жить? Почему линукс такой линукс? https://ideone.com/AhIPz6
>>1360455Надеюсь ты не специально для меня все это писал?Для линукса можно еще через /proc/pid/exe getpid()https://stackoverflow.com/questions/143174/how-do-i-get-the-directory-that-a-program-is-running-from#198099Или вот библиотеку кто то написал (но в ней через self)https://github.com/gpakosz/whereami/blob/master/src/whereami.cПоскольку у в коде и так уже этих прагм (или как это называется) натыкано я по своему их напишу.
>>1360535> Надеюсь ты не специально для меня все это писал?Нет, я экспериментировал просто.> Для линукса можно еще через /proc/pid/exe/proc/self - это симлинк для /proc/<pid>, где <pid> - твой pid, так что это одно и то же.
>>1361118Сначала научись чему-нибудь полезному и работу найди, потом кукарекай.Понабежали животные со своей школой, пиздец.хоть и толстота
>>1362058Если ты ОС пишешь, первичную систему инициализации, драйвер или просто хочешь форкнуть какой то легаси проект на Си то однозначно, а если какое то десктопное приложение с нуля писать то зачем мучится писать его на си, честно говоря я деже не понимаю зачем мучится писать его полностью на С++
>>1362087Т.е. Си больше подходит для низкоуровневого программирования, чем кресты?Ну и поддержка легси.
>>1362089Си подходит, если ты хочешь понимать все, что происходит в программе. Т.к., в отличие от C++ язык простой, и не приходится заниматься шаманством.
>>1362089> Т.е. Си больше подходит для низкоуровневого программирования, чем кресты?На мой субъективный взгляд они оба не подходят уже ни для чего, но просто нету пока созревшей альтернативы.В Си меньше всяких возможностей, там нет ооп там нет нормальной работы со строками, нет никакой безопасности в плане работы с памятью, только математика и какие то базовые конструкции. В следствии чего программы получаются маленькими легковесными и быстро компилируемыми хоть на утюг прпи наличии компилятора. Плюсы по сравнению с Си содержат кучу всего, но это только по сравнению с Си, по сравнению с другими более модными языками в них куча архаизмов Си а современных фичь постоянно нехватает. Но для плюсов есть оптимизирующие компиляторы и расширения всякие для написания высоконагруженной и сверхпроизводительной хуеты а для модных молодежных только вот какой то один фронтенд к ллвм генерирующий мягко говоря неспешный и не очень оптимизированный код, а то и вовсе какой то самопальный компилятор.В общем Си на сегодня занимает нишу эмбэйдщины, плюсы хайлоад приложений и научной всякой вычислительной хуиты.Во всем остальном ВМ языки проявляют себя лучше. Пистон, Сишарп, Джаваскрипт.
>>1362113> там нет оопОтсутствие ключевого слова class - это преимущество. Писать объектно-ориентированный код можно на любом языке.> нет нормальной работы со строкамиА тебе какие строки? UTF-32 или UCS-16? Или, может быть, UTF-8, но с тормозами и исключениями, если строка невалидная? А если у меня микроконтроллер, и я в рот ебал ваш юникод, мне 6 бит на символ за глаза? Поэтому отсутствие "строк" - это преимущество. Огромный недостаток - то, что по традиции байты не отличают от символов и вдалбливают это в каждой первой книге, но это проблема большинства старых языков. Вот, например, в Python3 одумались.> никакой безопасности в плане работы с памятьюЭто системный язык. Не существует никакой безопасной работы с памятью, если ты сам определяешь границы. Тот же раст отлично это показывает - ты либо отсасываешь компилятору и не можешь сделать без костылей даже базовые вещи, либо... у тебя небезопасная работа с памятью.
>>1362121>>1362113Лол, т.е. я правильно понимаю, что С++ (это его ты пистоном назвал?) - это фреймворк для Си, с ограничениями, но фичами?
>>1362135А. Ну да. Там же сишарп и джава (но не скрипт же!)В общем, если нужно что-то маленькое, низкоуровневое, то это в Си. Если что-то больше, то С++, потому-что не придется ебаться с памятью.Спасибо за информацию! Пожалуй, попробую Кресты.
>>1362128Ахуеть, представь себе, спп реализован на си, и при желании ты можешь реализовать любой метод спп любого стандарта реализовать на си99. ты фронтендер да?
>>1362139Оу, прости, что в треде для начинающих вкатываться, я демонстрирую себя, как нуб, который только-только начинает вкатываться.А тебя не смущает, что я на русском говорю? Вдруг у тебя другие ожидания.
>>1362140Это не тред для начинающих. Это мертвый ситред, заваленный шлангоебами и вс дегенератами, и если ты хочешь тут остаться — привыкай.
>>1362141>Это мертвый ситредВат? Нумерной, не утонувший, дошедший до бамп-лимита и мертвый?>шлангоебами и вс дегенератамиЭтого ты так любишь?>и если ты хочешь тут остатьсяЯ хотел совет и получил его. Теперь я знаю, что если хочу попробовать, то намного разумнее будет начинать с крестов.
>>1362128>это фреймворк для Си, с ограничениями, но фичами?Нет. Это 2 разных языка со своими фичами и ограничениями.
>>1362121> Отсутствие ключевого слова class - это преимущество. Писать объектно-ориентированный код можно на любом языке.Ключевое в объектно ориентированном подходе не наличие или отсутствие слова class, а наследование.> А тебе какие строки? UTF-32 или UCS-16? Или, может быть, UTF-8, но с тормозами и исключениямиДа хоть какие, я же говорю про средства выражения и инструменты - регекспы мультистроки вставки, вот это вот все.> Это системный язык. Не существует никакой безопасной работы с памятью, если ты сам определяешь границы. В эльбрусе существует и в некоторых разрабатываемых на западе архитектурах по видимому будет то же.Так что готовься сосать у компилятора и учится решать задачи в рамках логики/конструкций высокоуровневого языка.
>>1362137>не придется ебаться с памятьюПридётся. Есть умные указатели, но ты всё-равно должен представлять себе, кто владеет чем и в какой момент всё удалять.
>>1362143Блять. Пощади, дебилоид. Если ты только-только начал вкатываться, то задавай нормальные вопросы, а не свою хуету уровня b с вопросами уровня куда вкатываца. Спрашивай по сабжу, ответят нормально.
>>1362153> Ключевое в объектно ориентированном подходеООП - это такой термин, у которого дохуя возможных трактовок, и каждый выбирает самое удобное для него толкование. Ты вот, например, даже не указал, что именно собрался наследовать. Реализацию ты можешь отлично наследовать на сишке.> я же говорю про средства выражения и инструментыБерешь либу и используешь.> В эльбрусе существует Нормальную документацию завезли уже?> по видимому будет то жеИнструкция bound в x86 старше, чем ты сам. Вот только оно настолько никому нахуй не нужно, что кроме как в тормознутом вижуалбейсике в двухтысячных этого никто нигде не видел. Да и там отключалось.> учится решать задачи в рамках логики/конструкций высокоуровневого языкаtsya.ruЧто касается логики и конструкций, вот я пишу прошивку или даже меморименеджер для ОС, вся память моя, что контролировать собираешься? Похуй. Пишу обычный сервер под линукс, у меня пул объектов, я их заранее выделил, они все мои, как будешь контролировать доступ от тредика, связанного с одним объектом к другому объекту из этого же пула? Интел вон не осиливает между адресными пространствами доступ разделить, постоянно что-то протекает, о чем уж тут говорить вообще.
>>1362163> Ты вот, например, даже не указал, что именно собрался наследоватьКак чего наследовать https://ru.wikipedia.org/wiki/Наследование_(программирование)> Берешь либу и используешь.Да нету такой либы чтобы дать то чего изначально нет.> Нормальную документацию завезли уже?Ну ты же охуел, подробное описание архитектуры валяется давно http://www.mcst.ru/files/511cea/886487/1a8f40/000000/book_elbrus.pdf#page=150Описания команд и вообще всей системы программирования только нет> Что касается логики и конструкций, вот я пишу прошивку или даже меморименеджер для ОС, вся память моя, что контролировать собираешься? Похуй.Это же часный случай, я вот то же например не хочу картинку качать на комп куда то что бы ее запостить а хочу сразу с буры по url постить сидеть. Давайте убирем все ограничения жабаскриптам что-ли пускай шлют запросы куда и как хотят, или не стоит все таки?Я не говорил вроде нигде что там где оно нахуй не надо надо ее туда втулить, мне просто непонятно что ненормального можно увидеть в нормальном разруливании задачь средствами языка.Тем более с эльбрусом как я уже сказал будешь как фуфел-ВМщик в область видимости втыкатьи учиться программировать по строгим правилам.
>>1362220> Да нету такой либы чтобы дать то чего изначально нет.Это в JS так, "вот браузер нипаддерживает, значит нельзя". А в Си если чего-то нет, ты просто берешь и пишешь. И чаще всего это уже кто-то написал за тебя.> Ну ты же охуел, подробное описание архитектуры> Описания команд и вообще всей системы программирования только нетТо есть все еще нихуя нет, что и требовалось доказать.> www.mcst.ru> Контроль границ данных и кода обеспечивается за счет того, что в качестве указателей на данные в программах на языках C и С++ применяются дескрипторы переменных и дескрипторы объектов соответственноОчень хорошее, глубокое техническое описание. Они изобрели fat pointers? Оно давно везде есть, но только область применения узкая, потому что тормоза, и потому что границы объектов часто размыты. Например, как в случае с пулом объектов выше.> а хочу сразу с буры по url поститьВ винде, начиная вроде бы с 98, в диалог открытия файлов можно вставлять урл.> мне просто непонятно что ненормального можно увидеть в нормальном разруливании задачь средствами языкаВ высокоуровневом языке защита ног от программиста - это плюс. А в низкоуровневом ты, а не язык, определяешь, что именно из всего окружающего мира - твои ноги, поэтому если язык лезет со своим охуенно важным мнением - это плохой язык.>>1362228В целом нет. В том виде, в котором оно сейчас - да.
>>1362244VLIW процессоры это тупиковая ветвь развития в процессоростроении, так что он говно в любом случае.
Сап, аноны. Подскажите, пожалуйста, по следующему вопросу:Есть ли стандарты языка в печатном виде C99/C11 и в нормальном переплете?Дело в том, что читать с экрана глаза устают и с печатного варианта приятнее. Можно, конечно, распечатать на работе, но тогда это превращается в кипу бумажек, в которой еще листы постоянно теряются и путаются. Поэтому, я был бы даже готов купить стандарты в виде книги, если цена приемлемая.
>>1362259> Есть ли стандарты языка в печатном виде C99/C11 и в нормальном переплете?Есть. Официальные, у iso.org. 13к, и он твой. Ну или есть многочисленные сервисы print on demand, получится в 3-4 раза дешевле, но при этом все еще с нормальным качеством.
>>1362262>>1362266Ок. Спасибо. 13к многовато для меня будет. Да и в 3-4 раза дешевле - тоже. Видимо, буду возиться со скоросшивателем)
>>1362259Просто интересно, зачем тебе "читать" стандарт? Я понимаю использовать как справочник (раздел тут, раздел там), но чтобы отдельно сидеть и читать? Там же legalese очень серьёзный.
>>1362327А я его как справочник и собираюсь использовать. Видимо, плохо сформулировал в своем вопросе. Подсмотреть что-то, если непонятно, что бы под рукой было. Лучше в стандарте смотреть, чем на StackOverFlow искать. Что-то "читать" ради того, что бы просто "читать" - я не собираюсь, т.к. это глупо.
>>1362331> Лучше в стандарте смотреть, чем на StackOverFlow искатьНе факт. В стандарте ответы могут быть раскиданы по разным главам, а на SO тебе все это уже нашли и свели в один короткий ответ, да еще и с комментариями.
Подскажите, где я обосрался? Выводит огромное значение, хотя вроде все логичноhttps://pastebin.com/raw/ivBedi3m
>>1362484> Подскажите, где я обосрался?Обосрался ты в первую очередь в отсутствии проверки значения, которое вернула scanf(). Если бы проверил - узнал бы, что scanf() делает ноль присваиваний. А делает она так потому, что указание точности в scanf() не имеет смысла и поэтому не поддерживается. Оставь просто %lf, и все заработает.
>>1362484Бля, ну куда ты лезешь? Это не объектная хуита, тут нельзя вызывать методы на каждый пук. Если ты допилишь этим же образом функционал до базовых функций обычного калькулятора, у тебя будет программа будет два числа складывать за 50кб памяти. Или в джаву или сишарп, тебе самому же легче будет
>>1362614У него все ок. Код читаемый, вызов cube() компилятор заинлайнит. Можешь сходить на годболт и проверить.
>>1362631>>1362623Нельзя так писать на си. Это язык не для этого. Нельзя считая выражение из 10 действий вызывать десять раз разные функции и постоянно в них перекидывать промежуточный результат. Нельзя использовать сканф в реальной работе. То что он делает — это просто реализация контента задачников по джаве на си. Бесполезно, бессмысленно, беспощадно. Таким образом ничему не научиться в си, и судя по всему ему и нужен не си. Ему будет лучше и легче пойти сразу делать это на джаве.
>>1362666> А ты MemorySanitizer заюзал на gcc?Конечно. Но в моем коде редко всплывают подобные проблемы.>>1362669> Нельзя использовать сканф в реальной работе.Единственная здравая мысль. Но он вряд ли пишет что-то реальное, так что никаких проблем по-прежнему нет.
>>1362693>Конечно. Но в моем коде редко всплывают подобные проблемы.И давно в gcc завезли чеки на чтение неинициализированной памяти?
>>1362669>Нельзя считая выражение из 10 действий вызывать десять раз разные функции и постоянно в них перекидывать промежуточный результатЯ понимаю, если у тебя оптимизированная функция с SIMD и интнринсиками, когда ты реально считаешь циклы и расчитываешь скедьюлинг на порты проца, или ты пишешь под эмбеддед с хреновым компилятором, который половину языка не поддерживает, тогда да.>Нельзя использовать сканф в реальной работеЕсли в реальной работе ты в прицнипе принимаешь инпут от юзера в проге на Си (или даже плюсах) - это уже провал. А для примеров вполне сгодится. Те же K&R начинали с такого рода примеров.
>>1362705> чеки на чтение неинициализированной памятиОбычно решается заполнением кучи всевозможными 0xbaadf00d. И еще шланг умеет давно, и valgrind вроде тоже. Гораздо более частый доступ к неинициализированной локальной переменной ловится еще на этапе компиляции уже лет тридцать.
>>13627250xDEADBEEF дико проиграли когда индусы спросили, почему у нас в драйвере используется это значение