Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Пожалуйста, пользуйтесь 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 помогает читать сложные сишные декларации.Прошлые треды:- №38: https://arhivach.ng/thread/419611/- №39: https://arhivach.ng/thread/423396/- №40: https://arhivach.ng/thread/428550/
>>1362802Ох уж этот пердо-рабский менталитет. Пока было одно от царя и бога, они спокойны, как только появился выбор из целых двух вариантов - ох, ах, мам, янизнаю что выбрать, пасаветуйти за меня, мне самому слишком сложно, не привык думать и решать за самостоятельно.
>>1362867> Ох уж этот пердо-рабский менталитетА был быфронтендский сказали бы "ох блять, теперь придется в джвух проверять как код конпилируется"
>>1363231default: puts("Напиши свой компилятор, с блэкджеком и шлюхами!");да, я знаю, что в эту ветку не зайдет, потому и дописал этот вариант не стоит вскрывать эту тему
>>1363221Когда-нибудь ты вырастешь и перестанешь. Это >>1363231 тоже ты? Вот если бы поставил на первое место tcc, было бы тонко. Угадай, какое число сгенерирует твой код, если RAND_MAX == INT_MAX (в glibc, например)? Не делай так больше.
>>1363240>Угадай, какое число сгенерирует твой код, если RAND_MAX == INT_MAX (в glibc, например)?Какое?>>1363333Хм, так действительно проще.
>>1363384> Какое?Либо результат, умноженный на три, будет меньше INT_MAX просто потому, что он меньше, либо будет переполнение, и при переполнении остаток тоже будет меньше INT_MAX. Значит, при делении на INT_MAX ты всегда будешь получать ноль. Ну разве что ты найдешь компьютер, где INT_MAX делится на 3, тогда ты ради разноообразия будешь изредка получать 1, но не больше.
Почему бичи не смогли переносы нормально расставить в учебнике? Ну неужели нельзя хотя бы в книжке форматировать код так чтобы его было удобно читать?
Помогите плиз. Лучше вас на доске в этой байтоебле наверно никто не разберется.Мне нужно читать бинарные файлы и редактировать их.Например.Есть картинка в raw-формате. Мне нужно считать из этой картинки величины для всех пикселей и поместить их в соответствующий двухмерный массив. Вроде бы простая задачка, но я не понимаю, как читать из бинарника по одному байту. Работал только с текстовыми файлами, а там чтение построчно, все проще.
>>1364145Виртуальные машины меня пока не интересуют. Я хочу сделать удобный консольный калькулятор с блекджеком и шлюхами, а то обычный гуишный совсем не удобный.
>>1364159Неважно. Мне не только raw-файлы надо читать, это только как пример.В raw-файле каждый байт - это 1 пиксель, число в байте - это интенсивность белого цвета. Мне надо как то побайтно прочитать.Как это сделать? Сначала записать в память все содержимое файла, а потом уже побайтно отсекать?
>>1364160Да и так и так можно, лол. Си разрешает к массиву обращаться хоть как к одномерному, хоть как к трехмерному, етц. Главное, за пределы не вылететь. В общем, Интернет тебе в руки, fread в поисковую строку и удачи.
>>1364160Я такое в сишке ни разу не делал, тоже интересно. Делал подобное в питоне (он совсем тормозной для этих дел) и дишке. В дишке все замечательно получалось - читал файл сразу крупными кусками, обрабатывал и складывал массив, потом выплевывал в другой файл. Правда потребление памяти было огого, потому что я что-то не оптимально делал, но работа по сравнению с питоном просто сказочная была.
>>1364160Вот стандартная библиотека ввода-вывода, там много всяких полезных функций для твоей задачи.https://www.opennet.ru/docs/RUS/libc/libc-3.html
>>1364160Вон в википедии есть пример как прочитать пять байт из файла.https://en.wikipedia.org/wiki/C_file_input/output#Examplehttps://ru.wikipedia.org/wiki/Файловый_ввод-вывод_в_языке_Си#Пример_использования
>>1364175>>1364180>>1364182Ок, спасибо.Теперь другой вопрос. Что делать, если структура бинарника примерно известна, но размер данных внутри структуры непостоянный?Например, такая структура: сначала идет текстовый заголовок, затем количество байтов в Int32, которое занимает эта структура, затем сами данные, которые могут включать в себя другие заголовки и т.д., а также имеют непостоянный размер.Как читать данные из таких структур? Искать в цикле текстовый заголовок, а затем читать указанное количество байт?
>>1364157Вот начал. Правильно прочитал всю строку с пробелами? Теперь нужно научиться как распарсить строку на числа и команды и посчитать то что там написано. Сначала простые арифметические действия +-*/.
>>1364025К счастью в Си можно большую часть кода (кроме препроцессора) писать хоть в одну строку. А книжка - это скан кривой, наверное.>>1364148> не понимаю, как читать из бинарника по одному байтуЗачем тебе по байту?buffer = malloc(width ∗ height);fread(buffer, 1, width ∗ height);адресуешься buffer[y ∗ height + x]>>1364189Читаешь несколькими fread. Строки побайтово. Можешь еще прочитать или смапить (mmap()/MapViewOfFile()) файл целиком и потом парсить его из памяти. Это проще, если файлы относительно небольшие.>>1364222NULL - это (void ∗) 0, укозатель. '\0' - это целочисленная константа (int) 0, а в крестах (char) 0.>>1364241Возьми любую книгу про компиляторы. Можешь книгу дракона, можешь какое-нибудь говно попроще типа https://compilers.iecc.com/crenshaw/
>>1364248buffer = malloc(width ∗ height);fread(buffer, 1, width ∗ height, fp);адресуешься buffer[y ∗ width + x]Пиздец я.
Ребят, в книжке было задание, в котором просили посчитать сумму двух гармонических рядом. В одном ряду все члены положительные, во втором отрицательные только четные. Сделал тут прогу, работает, но не покидает ощущение, что я забыдлокодил. А, ну и оператором if пользоваться было нельзя. Поясните, быдлокод это чи не? https://pastebin.com/raw/Z8xTAD1Z
>>1364023Зачем нужны вообще эти книги по языкам? Серьезно, какой смысл их читать, если без четкого понимания что ты хочешь делать все это бесполезное чтиво, а с четким пониманием тебе скорей всего не по языку придется гору литературы изучать, а по всяким ручкам в ос, api, особенностям железа. Сказать по правде мне кажется большинство программистов осваивали языки постольку поскольку, поэтому и не могут внятно ответить на извечный вопрос со стороны непосвещенных "с чего начать". У человека просто появляется желание что то реализовать он берет чужой кусок кода начинает его ковырять методом тыка, гуглить постепменно начинает вникать как это работает, усваивает минимальные азы, а потом садится и обклажившись документацией по системам сборки, фреймворкам, библиотекам, штурмует мозгом стену до переопухания. Язык постигается попутно попутно, дрочь на них мне лично видится странным, а книги по языкам я вообще не понимаю для кого.
>>1364311Твоя проблема в том что ты утилитарист. И вообще как можно знать что ты хочешь не зная как и что ты можешь?
>>1364330> как можно знать что ты хочешь не зная как и что ты можешь? Это вопрос пустопорожний - с чего ты взял что надрочив си по заданиям в книжке и написав хэловорд ты необходимые знания c умениями приобрел? Скажешь тебе (например) - иди вон фильтры для изображений запили (регулируемую яркость, сепию, grayscale) ты так и так их просто так не напишешь, ты пойдешь перебирать тонну всякой хуйни по битмапам и особенгностям работы с ним и еще всякой дополнительной херни связанной с тем куда там это все вывести и через что настройки реализовать. И так происходит постоянно, даже владея языком в совершенстве эта поебень не заканчивается никогда, и чтобы этой ебатней заниматься нужен позитивный стимул в виде идеи и желинии ее реализовать.
>>1364378Ну раз ты скозал что нужон, значит так и есть. Это звучит примерно "чтобы заниматься радиотехникой надо хотеть собрать айфон", бредово короче.
>>1364378из-за перфекционизма не могу взяться за свой пет-проджект, потому что неуверен, что в совершенстве знаю язык, чтобы его написать. Это нормально?мимо
>>1364381Нет, не нормально, делай его, делай как можно более лучше, нет предела совершенству.Иначе ты его никогда не начнёшь.
>>1364379> звучит примерно "чтобы заниматься радиотехникой надо хотеть собрать айфон", бредово короче.То есть ты за язык схватился с расчетом на то что достигнешь когда нибудь такой уровень просветления, который позволит познать дзен и написать свою операционную систему с попов-офис?Просто сильно резануло ухо про айфоны, как будто блять любая деятельность сводится к тому чтобы запилить йобу и стать успешным. С таким подходом иди в бизнес лучше, программирование не для тебя.
> Просто сильно резануло ухо про айфоны, как будто блять любая деятельность сводится к тому чтобы запилить йобу и стать успешным. С таким подходом иди в бизнес лучше, программирование не для тебя.Вот уж странное высказывание! Чем плоха цель придумать и реализовать йобу? Язык это же инструмент для созидания, а не самоцель.
>>1364404Ничего плохого, у меня на самом деле тоже есть подобная цель, но она долгосрочная и может быть я ее никогда не реализую, но в любом случае путь к ней усеян маленькими квестами, как связанными ( то есть опыт в создании которых пригодится и продвигает меня ближе к цели) так и не связанными, то есть они конечной цели не дадут ничего но помогают сейчас прокачать скилы и пополнить знания.Что касается айфонов то я имел в виду идеи вроде "вот я сейчас стану великим погромиздом, напишу какой нибудь телеграм и заживу" диструктивные как по мне
>>1364432Попробуй базу данных. Или если совсем новичок, то напиши свою лог ин процедуру на одном стракте и постепенно попробуй к ней прикрутить больше фич.
Можете поделиться ссылкой на какой-нибудь сравнительный обзор компиляторов? Плюсы, минусы каждого и т.п.
>>1364707Для крестов юзай шlang. Если си для тебя лишь инструмент для вката - юзай что угодно, хоть вижуал студию. Если же собираешься работать с си то есть либо ембедить никсы в весы в пятерочке, либо писать алгоритмы для микроволновок за 30к в месяц, или поддерживать схожее легаси говно из 90-ых то GCC, ибо он написан как раз под стандарты 89/99, на которых то говно и работает.
>>1364684ideone.com (выбираешь просто C), wandbox.org (можешь вписать ключик -ansi даже, если хочешь)
А есть человеческая книга по си, написанная без ебланских ошибок, с нормальным форматированием и чтобы задачи из неё нормально компилились без ошибок?
>>1364727Значит GCC, спасибо, с ним и работаю. В целом мне интересно почитать чем они отличаются, не совсем поверхостно, не для новичков, но и не совсем в дебри уходить. Об архитектуре представление имею, с Си знаком, но не в качестве основного языка, а на уровне написать биндинг к СИшной либе.
>>1364778Ну а что именно тебя интересует?Т.к. шланг - поделка изначально выступавшая в роли догоняющего, их мануал написан в стиле чем мы лучше GCC, поэтому если тебя интересует что-то не конкретное, то могу только посоветовать полистать менпейдж.Я лично юзаю GCC, т.к. на старых машинах он дает большую производительность. Преобразуя код в нижние уровни он пытается его отпимизировать для минимальных затрат ресурсов. Очевидно в этой фиче GCC нет смысла если ты пишешь Си код для 64 битных процев ЩТО тут ты либо долбоеб либо школьник вонаби реверсинженер ловитель пакетов. Плюс многие платформы уже перестают поддерживать GCC (спасибо JVM и новым мультиязыковым компилерам);
>>1364921Хочется сесть сразу на 2 стула, чтобы с джеком дениелсом и флорентиной не спеша покуривая сигару читать книгу перед камином, получать удовольствие и учить язык за одно.Сейчас читаю "программирование на си для начинающих" перри-миллер. Вроде книга хорошая, но непонятно почему в книжке main(), а в компиляторах int main(). Учитывая что до этого я только бейсик в школе все совсем сложно.
>>1364925"int main(void);" - полный прототип (в реальных программах, конечно, делать прототип main не стоит)"main()" - просто упоминание функции. Скобки добавляются чтобы ты понял, что это не просто что-то main, а функция main. int в начале - тип возвращаемых функцией данных. В некоторых всяких хуйжективхуйси можно опускать у main(); возвращаемое значение. К самому си это отношения не имеет. Просто виндовские костыли.
>>1364940add:в некоторых говнокомпиляторах (пробабли после 99 стандарта) можно не указывать возвращаемое значение main(), и они по умолчанию проставят тебе int, только реально этим пользоваться -- пиздец какой друной тон, придуманный долбоебами из JVM подобных языков, который потом еще и крестовики переняли. Код с такой хуйней как плевок в лицо будет воспринят всеми нормальными людьми. Что gcc по 99 стандарту, что шланг запрещают опускать возвращаемое значение у main, поэтому просто восприми это как опечатку.
>>1364940Это понятно что инт это тип данных. >Что gcc по 99 стандарту, что шланг запрещают опускать возвращаемое значение у main, поэтому просто восприми это как опечатку.Ясно понятно, буду иметь ввиду.
>>1364943При чем тут говнокомпиляторы, если это стандартный синтаксис для C89? Поддерживаешь C89 - поддерживаешь неявный инт, указание любых аргументов для функций с пустыми скобками, декларации аргументов перед { а не в () и всю прочую хуйню. Даже если тебе не нравится. Да, это старый синтаксис, писать так не стоит, но знать о нем нужно - еще встречаются исходники, написанные в таком стиле.
>>1364925Запомни щенок, блять. Всегда пиши только так:int main(int argc, const char argv) {...}Когда будешь вызывать свою программу из шелла или из командной строки, то int - это всегда будет код завершения твоей программы. Примечательно, что командная строка оперирует не логическим состоянием а уровнем ошибки и поэтому в комнадной строке 0 - это правда нормальное завершения процесса а 1 - это ложь ненулевой уровень ошибки и соотвественно всё, что выше единицы - это ложь. Так как на уровень ошибки отводится 1 байт, то уровни ошибки от 0-255. Дальше. int argc - arguments count это количество аргументов, которые твоя программка получает, когда вызывается из командной строки. const char argv - это arguments values значения аргументов, которые передаются при вызове из командной строки. Конст, потому что меня в универе препод учил, что нельзя изменять входные данные программы. Шелл сам определяет как разбиваются аргументы командной строки. Как правило это пробел, но можно и что-то индусское накостылить.А ещё запомни щенок. Явное, лучше чем явное. И тебя никто не стукнет по рукам, если ты напишешь лишнего, но запутанного.
>>1364950> шланг запрещают опускать возвращаемое значение у mainКак же оно тогда без ворнингов-то конпелируется? https://wandbox.org/permlink/tiXtDxWXuSc2vBWA>>1364952> командная строка оперирует> уровнем ошибкиЗависит от реализации. Сишка вообще знает только о EXIT_SUCCESS и EXIT_FAILURE, причем FAILURE может быть и 100500, а не 1.> const char *argv[]Нету const в стандарте. Туда можно писать, и пишут.> препод училЭто его половые проблемы.
>>1364952>const char argv[]никакого конста, ибо храниться параметр будет в любом случае все время работы main(), а даже его возможная перезапись никак не отразится на безопасности работы с памятью. конечный юзер сам по себе никуда ничего не вводит, зпускается все чаще всего make/exeс хуйней, а значит сломать твою прогу таким образом обычному юзеру будет тяжело.>argument valuesarguments vector*;>>1364955>9 кланг созданный в эпоху джава детей и вкатывальщиков не могущих осилить даже поинтеры в ОЧЕНЬ СЛОЖНОМ сиУверен, что ниже 9 версии не будет ни одного без ворнинга
>>1364969> Уверен, что ниже 9 версии не будет ни одного без ворнингаИ в предыдущих не будет ворнингов. И в гцц тоже.
>>1364999Только что твой же код на ванде запустил со всеми гсс и всеми клангами кроме 9-ых, и ВЕЗДЕ выдало ворнинг. -Werror передает привет.
>>1365010Никто и не говорит, что невалидный. Дело в стандартах (не только писанных, но и общепринятых) Писать int перед main для си прогера должно быть то же самое, что саму точку входа называть main и никак иначе — бетонный стандарт.
>>1365014> должно быть то же самое, что саму точку входа называть mainПериодически обзываю точку входа start, когда пишу под bare metal. Как мне жить-то теперь?Алсо, выяснилось, что ворнинги на implicit int есть только в gcc. clang (любой) соответствует стандарту. Вот, например, третий шланг: https://wandbox.org/permlink/tiXtDxWXuSc2vBWA>>1365019Переносимо - никак, но есть ungetc().
>>1365020Не очень понял что ты имел ввиду, ибо по ссылке открылся аутпут 9 кланга.Из интереса накатил сейчас на ведро 7-ой кланг и даже без флагов словил ворнинг
>>1365044Значит реально зависит от стандарта.Я всегда думал что это приколы компиляторов. Позорно ретируюсь.
Такой вопрос, а что нужно сделать что бы в функцию можно было ссылку на переменную отправить и получить на ней результат из текущей функции?[CODE]void plus_1(int i) { i += 1; }int main(void) { int i = 1; plus_1(&i); printf("%d", i); // => 2}[/CODE]
Анон, у тебя есть что-нибудь почитать на тему AMQP, очередей сообщений, брокеров и т.д.? Всё это по большому счёту FIFO-очередь, где данные со всякими вспомогательными заголовками идут поверх транспортного протокола. Правильно? Репост из ньюфаг-треда в самый адекватный тред.
Не нашел в шапке ничего про микроконтроллеры и т.д.Скачал на udemy пару курсов по С и микроконтроллерам, сижу изучаю, вкатился к вам в тред, у вас тут лампово? Как относитесь Embedded программистам?
Запилил консольный калькулятор, который пока понимает только сложение и вычитание. Как вам? Какие будут рекомендации?https://ideone.com/ZJ8mdKСледующий щаг - добавить понимание умножения и деления с их повышенным приоритетом. Как лучше всего это сделать?
>>1365322Ну сначала ищи операции умножения деления, делай их пока ни одной такой операции не останется, после этого у тебя останется привычная строка со сложением вычитанием
>>1365322Есть такая штука как isdigit().И выглядит сильно лучше моего парсера одного файла "Конфига"Алсо, есть какие IDE получше Code::Blocks? CLion адово тормозной, как и Студии.
>>1365349Но это не IDE. И вечно наяривать gcc дохуя файлов -std=99 -Werror -o prog.exe несколько заебывает. Не мейкфайлы и шелл-скрипты же делать ради этого.
>>1365329Тогда надо будет либо загонять весь ввод в строку и работать уже с ней - сразу появляется ограничение на длину строки, либо делать длинные стеки под числа и операторы - тоже появляется ограничение на длину стека. Хочется сделать без ограничений.
>>1365367Ограничений не будет, если ты используешь динамическую память. Ну не сожрет же твой калькулятор больше ста метров, ну.
>>1365373Ну епт, умножение железно поддерживается даже каким-нибудь древним AVR8535. А Си просто нравится. Как и Перл. А вот для Форта я туповат, увы
>>1365367Непонятная ебля у тебя, ну не мое дело, если не хочешь каких-то ограничений стеков и т.д., делай все проще.Читаешь ввод посимвольно.1) Читаешь первое число2) Читаешь знак3) Читаешь второе число4) Читаешь второй знак 4.1) Если он плюс или минус, то совершаешь операцию над первым и вторым числом4.2) Если умножить или разделить, то кладешь в буфер первое число плюс знак4.2.1) Читаешь следующее число4.2.2) Совершаешь действие5) В итоге у тебя в буфере первое число и знак, и результат вычисления - второе число, а это пункт 3 - GOTO 3)
>>1365378Если следующий знак — открывающая скобка, идёшь назад до первой открывающейся, и считаешь все
>>1365378Проебался в 5 пункте, если вышел с 4.1 то GOTO пункт 2, если с 4.2.2 то GOTO 4.>>1365382Скобок у него вообще нет, это видимо у него следующий пункт.
>>1365372>динамическую памятьБлин, я еще не знаю что это. Опять учить. Хочется дела делать.>>1365378Хм, занятно. Так наверное и сделаю. Спасибо.
>>1365322Запили ещё парсинг скобок, возведение в степень и возможность задания собственных констант каких-нибудь, а то какую-то хуйню для школьников делаешь.
>>1365388Виртуалку поставь и надрачивай все с нуля. Я когда сам только начинал, пытался умножение сделать через байты. Закономерно проебался, поэтому не советую пытаться. Сделай просто исключения на умножение чисел, типа x>1, x<1 && x>0, x<0, x<-1, x>-1 && x<0 Если решишь ебаться с байтами, для начала сделай только int.
Пните, что читать, если надо считать из текстовика данные и распихать их по структурам, в том числе и вложенным. Проблемы с последним - на третий уровень моих мозгов уже не хватает.
>>1365322> Как лучше всего это сделать? Рекурсивно разбиваешь выражение, сходя из приоритета операций, от наименьшего к наибольшему. Составляешь дерево: в предка кладешь операцию, в потомков (ты используешь лишь бинарные операции, потому их всегда будет 2) -- разбитые выражения.Продолжаешь опускаться вниз до тех пор, пока у тебя не останутся лишь числа (если выражение некорректно, то останется некоторая мусорная часть).Потом проходишься по дереву снизувверх и склеиваешь числа по операции-родителю.В этот метод легко добавляется обход скобочек (внешние скобочки просто отбрасываются), обработка унарных операций (в случае унарной операции родитель будет иметь одного потомка) и прочее.Можешь, кстати, написать не калькулятор, а символьное дифференцирование. Оно делается в точности так же, только обход снизу вверх чуть усложнится.
Я не понимаю как работает пирамидальная сортировка. Почитал, и все равно не пойму. Может кто нибудь на пальцах разъяснит?
>>1365526Ключевая операция - соединение двух отсортированных последовательностей в одну отсортированную последовательность. Например, есть у тебя 1 3 4 6 7 и 2 5 8. Одновременно двигаешься по обеим, смотришь, где меньше, и складываешь в результат. 1<2 значит выбираем единицу из первой, остается 3 4 6 7 и 2 5 8, дальше аналогично 2, 3, 4, 5, 6, 7, 8. Идея в том, что эти две подпоследовательности в момент соединения гарантировано отсортированы, потому что рекурсия сначала доходит до самых маленьких (по 2 элемента, думаю несложно), и потом соединяет по 4, по 8 и т.д. Степень двойки или нет - не принципиально, просто местами будут по одному, а не по два попадаться.
>>1365569Я не он, но ты хуево объяснил без обид>Одновременно двигаешься по обеимПосле этого перестал читать, невозможно что-то делать одновременно.Тот кому ты объясняешь, ты это зря ему объясняешь, в гугле стоит ввести heap sort, heap sort для чайников, там будет 1000000 объяснений с разных точек, видео, презентации, иллюстрации, а ты надеешься ему объяснить лучше? Зря время теряешь.
>>1362799 (OP)Сап. Пишу базу данных на си, что-то типа списка одноклассников/одногруппников, пока что сделал только добавление в файл бд. Как организовать поиск через структуры из файла? Я ваще нихуя не пойму. Например вот так выглядит бд в файле:|NAME USER |2CH |ABU |HUY ||NAME USER |2CH |ABU |HUY |а так выглядит структура:typedef struct _bd{ char name[25]; char user[25]; char 2ch[20]; char abu10]; char huy30];}bd;
>>1365591соглы. Вим не столько для написания кода, сколько для моментального форматирования текста. Как sed только немного круче. Он в отличие от sed интерактивный. Пожалуй, на этом отличия заканчиваются.
>>1365591Vim с каким-нибудь ClangCompleter и парой десятков плагинов очень классная штука, если у тебя проект не на десятки тысяч строк и полновесная IDE особо не нужна. Просто берёшь и пишешь код.
>>1365679Так ее и посоветовали человеку, который не знает, как сделать умножение в программе, хуле ты доебался.
>>1365612Просто читай одну запись за другой с помощью fread. Так работает (работал) DBF. Если захочешь искать быстрее, можешь запилить индексы, например. В простейшем случае ты можешь записать индексы записей, отсортированных по имени, в отдельный файл, а потом двоичным поиском читать индексы и соответствующие им записи.
>>1365322Сори, анон, но как-то костыльно написано + логику всю переписывать, если добавлять приоритеты операций, который возникают при использовани скобок, операторов умножения/деления и т.д. Советую почитать про запись выражений в польской нотации. Будет гораздо проще сделать нормальный калькулятор. Строчек в 200, думаю, влезет
А можнго ли в си создать экземпляр функции которая являетсчя ссылкой на другую функцию с двумя переданными аргументами? Ну типа как в жабаскрипте:function foo (int, str) { };var f1 = foo.bind(null, 1, ".");
>>1365871> «Поинтерами баловать можно, а баловать кодом нельзя»© The C Language>>1365875Ух как медленно грузитсяЯ пытаюсь что-то типа такого https://paste.ofcode.org/78985hzGxnFE25Hhgq9z8MЕстественно код не рабочий
>>1365862В плюсах можно.В си можно делать через указатель на функцию, да и пожалуй всё, да и то это не совсем то, что ты хочешь.
>>1365882Ну целевой проект просто на Си, не буду же я весь код переписывать. Так то конечно если б с чистого листа, на плюсах делал бы.
>>1365883Если хочешь, можешь сделать через макрос типо.#define f() foo(2, 4)Сможешь писать просто f();Единственное что это всего лишь макрос, который препроцессор развернет перед компиляцией, но это визуально ближе к тому, что ты хочешь хотя бы.
>>1365887О, спасибо. Мне в принципе и нужно для того чтоб в 10 местах одно и то же не исправлять если что, а как там препроцессор подготавливает это уже похуй.
>>1365852Читал про нее - не очень понравилась что нужно дофига конвертировать выражение используя для этого кучу лишних длинных массивов. А тут хоть может костыльно, но всего два коротеньких стека под операторы и под числа, длина которых равна количеству разных приоритетов +1, и всего лишь один проход по выражению.
Накостылял в калькуляторе умножение с делением. https://ideone.com/K0zNuaДелал примерно как посоветовали >>1365378, логика программы при этом не пострадала, только стеки увеличились на одну ячейку, появилась рабочая область в виде двух смежных ячеек в этих стеках, которую можно перемещать по стеку и добавилась проверка приоритета операторов.
Сейчас ведь IDE не модно, сейчас модно расширеные редакторы типа сублейм, текстмейт, VS Code, Atom и так далее.
>>1366131Ручками установить errno, и если он выставлен - обрабатывать возвращаемое как целочисленные коды ошибок. Ну или завести свою глобальную переменную под это дело.
>>1366131>headerdefine PROIZOSHLA_ZALUPA 1488>func.cif (zalupa cond)ErrorHandler(PROIZOSHLA_ZALUPA);>Error_handler.cif (func(x) = 1488)puts("произошла залупа пиздец короче чтото не так");
>>1366215void errorhandler(int error) {switch (error)case 1488:puts("zalupa occured error code 1488");break ;}
>>1366221Он имеет в виду что там компилятор старый, но ему ничто не мешает прикрутить туда компилятор от новой студии.
>>1365975Тебе же написали - неверный указатель. Сделай в load_file аргумент или указателем на массив фиксированного размера, или выкинь фиксированный размер из LIST нахуй и принимай указатель на указатель. И unsigned тоже выкинь. https://ideone.com/3aWjFh>>1366010> обработка вложенных скобок практически всегда через рекурсию выполняетсяНет, нормальные люди пилят явный стек, это позволяет нормально обрабатывать ошибки, а не вываливаться через сто уровней рекурсии вручную или через longjmp.>>1366080> Сейчас ведь IDE не модно> модноТы, наверное, из мейнтейнеров leftpad.js? Или тебе просто нравится дрочить на инструменты вместо решения задач?>>1366131> Если в функции, которая возвращает double, что-то пошло не так, как это событие передать наружу? Или выделить из всего диапазона double что-то ненужное для индикации ошибки (например, банально вернуть NaN), или bool func(double ∗result).>>1366221Зачем /TC, если можно просто добавить в проект файлы с расширением .c, а не .cpp?>>1366235И енжой проблемы с отладкой и инкрементальной компиляцией. Но в основном с отладкой.
>>1366254С отладкой дело решается так же как и с компилятором, а проблема с инкрементальной компиляцией вообще откуда должна взяться?Алсо для этого уже придумали мейкфайлы чтобы ничего в настройках ide не менять и удобно компилить из под терминала.
>>1366263> а проблема с инкрементальной компиляцией вообще откуда должна взяться?Прошу прощения. Я имел в виду Edit&Continue.
>>1366254> Сделай в load_file аргумент или указателем на массив фиксированного размера, или выкинь фиксированный размер из LIST нахуй и принимай указатель на указатель.Это какой то пиздец пиздеца. Я вначале отправлял значение (char *)LIST[num] а потом и вообще нахуй перенес массив по месту использования а в теле порограммы оставил только чиселки, с ними меньше проблем.> Ты, наверное, из мейнтейнеров leftpad.js? Или тебе просто нравится дрочить на инструменты вместо решения задач?Нет, я как раз давненько в веб фронтенд не лазил хотя левоотступ это вроде из ноды ну да хуй с ним уже и забыл что IDE и любимый редактор друг друга не исключают. Звиняюсь.
>>1366263>удобно компилить из под терминалаНу не знаю, что удобнее. Альт-табаться до окна терминала, жать вверх и энтер. Или же просто ctrl+f5.Мимо
>>1366270Явно какое-то браузерное говно. Атом?>>1366271Зависит от подхода к программированию. Если ты компилируешь при каждом изменении (F5-driven development), тогда конечно в консольку ходить не очень удобно. Если ты пишешь относительно большие куски, то консоль норм, и даже удобнее. А так, сейчас любой редактор можно научить компилятор запускать по хоткею.
>>1366271В иде/редакторах обычно есть интеграция терминала.Тем более это дело привычки, я много чего делаю в терминале, но меня наверное можно назвать красноглазиком, т.к. я на работе пишу драйвер под линукс.
>>1366278Не знаю, не пользовался им, выглядит красиво, работает скорее всего так себе.Думаю вот с вскода попробовать перекатиться на саблайм.
>>1366271>не знаю, что удобнееwhile :; do gcc "FILE" 2&>logfile; sleep 2; donewatch cat logfileИ отвешиваешь терминал на второй монитор, чтобы смотреть, какие ошибки выплёвывает компилятор.Какже ИДЕдети сосут. Я просто тащусь.
>>1366278>F5-driven developmentДа, оно, идеальное название. Написал строк десять, собрал, повторяю, когда решил проверить - запускаю и молюсь на распиханные в первой версии кода принты.
>>1366281>while :; do gcc "FILE" 2&>logfile; sleep 2; donewhile :; do gcc "FILE" 2&>logfile; sleep 2; done &да, в конце ещё пизже будет поставить амперсанд, чтобы отправить цикл в фон.
>>1366281Ну от подхода зависит. Я не постоянно пишу, а набегами. Между ними подсознание придумывает, как решить конкретную проблему. Ну и у меня не никсы.
Как это работает?char *lineptr[MAXLINES];Я правильно понимаю, что это объявляет массив из maxlines элементов, каждый из которых является указателем на строку?strcpy(p, line); lineptr[nlines++] = p;Каким образом работает это? Ведь длина строки не указана, вдруг там не хватит места для копирования p?
>>1366355p не имеет никакого отношения к твоему массиву с УКАЗАТЕЛЯМИ на строки. Где-то в памяти создаешь строку p, копируешь в нее line. А за тем просто в свой массив копируешь указатель (адрес начала строки p) p. Т.е. строки хранятся отдельно, а массив просто коллекционирует их адреса/указатели.
>>1362220>>1362244Господи, почему же Бабаян с Пентковским отдались Интелу. Если бы они не ушли к ним на западе все еще не было бы микропроцессоров, способных хотя бы в 1 MOPS. А мы были бы монополистами в мире микропроцессоров, создавали бы самые технологичные и быстрые решения, доход от продажи которых составлял бы триллионы долларов в год, ведь выхода у других стран не было бы - Интел сам не может, а остальные вообще полные бомжары. И только наш Эльбрус пробивает сверхзвуковой барьер в микропроцессорных вычислениях. Мы стали бы властелинами мира, держали в руках всю компьютерную индустрию, не продай они наши технологии врагу. Как так можно было поступить. Ублюдки.
>>1366435>не продай они наши технологии врагу. Как так можно было поступить. Ублюдки. Все правильно сделали, малаца, люблю их.
>>1365987Добавил скобочки на рекурсии.https://ideone.com/rDppF4Теперь нужно думать как парсить многосимвольные операторы, типа синусов и тангенсов.
>>1366444>эта весна и обострившиеся шизики повсюду>Как же вы сюда попадаете-то? Такая ты наивная няша :3
>>1366436Ничего прохладного. Пентковский создал набор инструкций SSE (на основе разработок микропроцессора Эль-90, который в 1990м году стал бы быстрейшим в мире, если бы пошел в серийное производство (развал СССР сделал эти планы неосуществимыми). Интел догнал бы его по производительности только через 10 лет (на самом деле не догнал бы - Пентковского-то у них не было бы, выпускайся на родине Эль-90). SSE до сих пор используется в новейших процессорах Интел) для Pentium 3, который увеличил производительность 3ки в 4 раза.А Бабаян пришел в Интел в 2004 году. Угадай, что Интел выпустит спустя 2 года с его прихода? Core 2, который станет отцом для твоего любимого Core i7, на который ты дрочишь. И эти микропроцессоры просто рвут все остальные в производительности. Очевидно, что в них использовались наработки Бабаяна для процессора Эль-2000. Так что когда ты теперь восхищаешься великолепными сверхбыстрыми процессорами Интел, тебе стоит вспомнить, кто стоял у их истоков. Советские ученые. Без их работ мир бы сейчас все еще радовался бы 0.5 MIPS'ам и 256 Кб оперативной памяти.
>>1366452Хуль теперь плакаться, радуйся, что из-за совместной разработки выиграл лично ты. Аля наивная фантастика 60-х, про совместное покорение космоса.
>>1366452То есть все правильно сделали - кинули пидорашек вроде тебя, гнида через хуй и уехали к белым людям.Ну хоть кто-то не дебил.
>>1366435Не могу понять толсто это или тонко.Алсо: вот допустим у меня объявлено Mix_Music mymusic;в исходниках SDL_mixer объявлено вот такstruct _Mix_Music { Mix_MusicInterface interface; void context; SDL_bool playing; Mix_Fading fading; int fade_step; int fade_steps;};typedef struct _Mix_Music Mix_Music;Я правильно понимаю что не могу вот так4 в тупую в своем коде mymusic->context вызывать а только через какой нибудьchar buffer = Mix_GetContext(mymusic);объявленный публичным, верно?
>>1366452А тотального отставания в электронике у СССР как бы и не было, ага. Во всем виновато копирование System/360, чоуж. И хуевое руководство.
>>1366452>если бы пошел в серийное производствоНо ты же понимаешь, что он никогда бы не пошел в серийное производство? Я много читал про все это не далече, чем полгода назад. Про компьютеры из СССР. Из прочитанного я понял, что все компьютерные технологии Совка - это копипиздинг западной техники, микросхем, микропроцессоров, технологий производства жестких дисков, мониторов и прочего прочего. И единственной реально революционной (все остальное - тупое говно тупого говна, которое появлялось в совке, когда на западе такие решения уже лет 10 как устарели) разработкой был этот пресловутый Эльбрус. Кстати, его концепт тоже спизжен - с машин компании Берроуз, которые не использовали ассемблера в процессорных командах, вместо него был высокий АЛГОЛ (его наши тоже спиздили, назвав "язык высокого уровня Эль-76"). Но концепт концептом, язык языком, спиздили и спиздили, а итог должен был превосходить суперкомпьютеры Берроуз да и вообще компьютеры всего мира. Но. Эльбрус 1 был сдан в 1980 году и никогда не пошел в серию. При этом он был слабее батьки-Берроуза, с которого вдохновлялся. Фэйл. Срочно начали пилить Эльбрус 2. Вот он как бы уже должен был быть гораздо сильнее и лучше предыдущего (хотя все равно безнадежно сосал у какого-нибудь Крэя). Но и он не пошел в серию. А почему? Машина-то получилось, как принято общественностью, неплохая. А потому что НЕТ БЛЯДЬ У СОВКА ЭЛЕМЕНТАРНОЙ БАЗЫ. Не мог он, как и сейчас не может, массово производить суперкомпьютеры и/или микропроцессоры. Потому что нет такой школы и промышленной технологии полупроводников, как у США (сейчас кто-нибудь кукарекнет, что многое из разработки теории и промышленности полупроводников разработали как раз-таки в СССР "Ряяя, ты что, не слышал про Алфероваааа, ряя", но я не знаю конкретно за Алферова, знаю только, что с проводниками в СССР и России полный пиздец - т.е., даже если наши какие-то технологии первыми разработали, воспользоваться ими они не смогли). Не умели и не умеют в транзисторы, интегральные схемы, микропроцессоры. Поэтому и выпустили Эльбрус 2 мелким тиражом. В количестве БЛЯТЬ 3 ШТУК. Все остальные Эльбрусы 2 - это так называемые "Эльбрус-1к2", т.е. перенос БЭСМ-6 на элементную базу Эльбруса 2. Рассказывать, что это за говно, думаю, не нужно. Берут устаревшую на 20 с лишним лет машину и натягивают на нее (или ее на) концепт Эльбрусовской системы с языком высокого уровня в процессорных командах. На выходе получается дикое, монструозное, страшное, нестабильное тупое говно, отстающее от западных машин как минимум на поколение. А ведь это "революционная разработка". Нету блять элементарной базы. Поэтому не смогли бы они выпускать эти "Эль-90". Были они на бумаге, вполне возможно, что помогло людям, участвовавшим в их разработке, вкатиться в Интел, Sun, Моторолу и AMD. Но производить такое промышленность СССР никогда бы не смогла. Нет технической обеспеченности. Так что да - лучшее, что могло случиться с Эльбрусом - это переход его команды в Интел. С отечественной элементарной и технической базой о мировом господстве в микропроцессорах можно забыть и даже на заикаться, а Интел успешно все вывел и выдал в массы.
>>1366475>Не умели и не умеют в транзисторы, интегральные схемы, микропроцессоры.а на чем тогда военная электроника работает? она все-таки у совка была пусть и не особо крутая да и сейчас что-то делают
>>1366477Да пиздежь это всё. Я будучи школьником годами занимался радиотехникой, паял всё, начиная с ламповых усилков со здоровенными трансформаторами и заканчивая схемами на логических элементах (микрухи с ноготь) и ни разу не видел ни одной иностранной детали. Вся элементная база была русская. Отставание пошло только с компьютеров (микропроцессоров).
>>1366537Зачем ты что-то объясняешь залетным детям из hw, которые с трудом себе-то объяснят что такое ток?
>>1366537Там не деталь, а сами элементы были иностранными. Можно погуглить, у всех отечественных диодов, микросхем и прочего были зарубежные прототипы. Где-то был сайт, где перечислялись с фотками советские копии и иностранные оригиналы.
>>1366537Мда, то-то было так много брака среди телевизоров и радиомагнитофонов, а электронных устройств сложнее "Электроники ИМ-02" в гражданском потребление просто не существовало.Видимо, только твои говноподелки пилить эти микроэлементы и подходили.
>>1366586> сами элементы были иностранными. Можно погуглить, у всех отечественных диодов, микросхем и прочего были зарубежные прототипы.Ну все охуеть теперь в Америке колёса круглые, давай нахуй на квадратных езди
>>1366586Это называется "аналог". Аналоги есть не только между отечественными и зарубежными деталями, но и внутри отечественных например. Дело в том, что схемотехника примерно унифицирована. Изобретать детали с нестандартными параметрами не круто.
>>1366456В си нет публичных/приватных полей, можешь обращаться так, как хочешь, если есть специальная функция геттер лучше обращайся через неёопять же не обязательно, для поддержания эстетики между либой и твоим кодом.
>>1366432Ну прата же. В C17 ничего особо интересного нет.>>1366660Полей нет, но если вот так struct _Mix_Music лежит в .c файле внутри SDL или в приватном (не распространяемом) .h, а typedef к ней в публичном .h, то единственный легальный способ достучаться до полей - через геттеры. Это классический способ инкапсуляции в Си (который, кстати, не осилили в крестах, где методы должны торчать в определении класса в .h вместе со всеми остальными кишками).
>>1366636Дело говоришь. При чем тут Сишка? Как сейчас помню, поднимаю в 88-м на советском компьютере javascript...
>>1362799 (OP)Всем привет, я новичок.Кто-нибудь может сделать так, как гифке, написав код на С?И так же в среде разработки покадрово сохранить и сделать один файл .gif на выходе, а потом показать код?Хочу выбрать язык, на котором буду делать такие вещи, а возможности языков не знаю.Помогите, пожалуйста.http://www.cyberforum.ru/3d-modeling/thread2421226.html
>>1366695Ну берешь либу для работы с гифками, рендеришь изображение во фреймбуфер, пишешь кадр в гифджиф, рендеришь следующий кадр, пишешь. От языка тут абсолютно ничего не зависит.
>>1366452Как мне кажется, всё-таки большая часть производительности из-за out-of-order execution, а не SSE. Да, оно безусловно важно, но без OOO ты бы до сих в асме сидел и руками вычислял трупуты и латенси. Особенно в 90-х, когда компиляторы разве что константы сфолдить могли.RIP Itanium
А какого хуя у меня программа сегфолтится?typedef struct _TAG_ { int x,y,w,h; img_t img;} g_t;g_t Button1;... _draw_img(Button1.img, Button1.x, Button1.y, Button1.w, Button1.h)Когда тоже самое было через обычные переменные все ОК
>>1366752Любопытное про кодинг под PowerPC на пастген-консолях. Чтобы далеко не ходить, вывод такой что эти чипы примерно равны 1/3 от K8(Athlon64) равной частоты на сложном (branch and microcode-heavy) коде.http://cbloomrants.blogspot.com/2010/07/07-10-10-powerpc-suxors.htmlhttp://cbloomrants.blogspot.com/2010/07/07-21-10-x86.html
>>1366763Ну нам-то откуда знать? Проблема где-то еще. Видимо, у тебя img инвалидный, ты структуру вообще инициализируешь?
>>1366752>>1366475>>1366452Что-то мне кажется вы этого долбаеба Бабаяна ну хотя бы слегкааааа так переоцениваете. Ну хотя бы самую малость. За Пентковского не скажу, так как нихуя о нем не знаю, не знаю на кой ляд ему этот SSE сдался, но раз хотел разработать, значит есть за что.Но Бабаян - огромнейший хайпожор, который "изобрел" читай спиздил все подряд прорывные технологии. Его Sun нахуй послали, прокрутив на залупе с его "невероятными процессорами", а свой охуенный Эльбрус ДВЕТЫЩИ он так никогда и не выкатил. Лол, обещал захуярить и похоронить Интел с начала 90х, а в итоге выкатили какое-то говнище только в 2008, которое с глубоким проглотом сосет у самых бюджетных Интелов. ГДЕ БЛЯТЬ ПРОТОТИП СУКА? В смысле, раз такой охуенный процессор был, где хоть один? Почему Sun нахуй послали? Потому что он им говна лил за шиворот, как вам льет. Увидел кучу модных, появившихся на заре 90х терминов (по крайней мере в отношение процессоров) - суперскалярность, VLIW, параллелизм, предвыборка кода. И как начал спамить этой терминологией всех подряд, не забывая еще спиздануть, что все это придумал он. Пиздабол он какой-то, миллион раз уже попадался, поэтому я ему не очень-то верю.
>>1366776> ты структуру вообще инициализируешь?Инициализирую бля! Как понять "иницмализирую"?Картинки не битые если что
>>1366777> как вам льет. Увидел кучу модных, появившихся на заре 90х терминовКому вам, мудила? Он в каждой лекции трындит про Эльбрус 1-2 повторяя по кругу что - OoO суперскаляр, первый (сирийный) в мире, интел только в 93ем осилил, всем давали пасасать.Итаниум никакого отношения ни к эльбрусу ни к бабаяну не имеет.
>>1366793Бабаяноёб порвался.Кого блять Интел только в 93 осилил, долбаеб? Суперскалярный мейнфрейм? Ну охуеть теперь, вот только Интел по микропроцессорам, а не по мейнфреймам специализируется. Первый же суперскалярный рабочий микропроцессор создала Моторола в 88 году, но никак не уебан Бабаян. Но и с желанием быть первым суперскалярщиком Бабаян сосёт бибу, так как Крэй создавал АБСОЛЮТНО СЕРИЙНЫЕ (а не 1-2 штуки, как его невъебенные "серийные" Эльбрусы) суперскалярные машины на 16 лет раньше этого пиздабола.Так что непонятно на что он тут претендует, на какое первенство. На суперскалярность? Сорян, вы опоздали на 16 лет, надо было раньше приходить. На суперскалярный микропроцессор? Извините, но что-то никто никогда не видел ваших рабочих суперскалярных микропроцессоров. Короче, он знатный пиздабол.
>>1366805> Бабаяноёб порвалсяkek написал порвавшийся долбоеб с горелой дупой. Иди с бабаяном на хабре спорь кто там первый и кто круче, тут тема про язык Си.
>>1366773> The result is that you can get wins by randomly offsetting your arrays when you know they will be used together. Some amount of this is just unavoidable. Ох лол. Как же рад, что под x86 всё делаю. Особенно когда читаю про модели памяти различных архитектур (например DEC Alpha - ебануться).
>>1366860Алсо, это чувак из RAD Game Tools? Как они туда столько классных людей набирают? Одни Фабиан и Кейси стоят сотни программистов.
>>1366776Короче у меня похоже проблема с пониманием как правильно работать со структурамипикрелейтед - когда я передаю картинку в модуль программа сегфолтитсяфункция из модуля делает вот этоvoid module_draw_img(img_t p, int x, int y){ SDL_Surface pixbuf = (SDL_Surface )p; SDL_Rect dest; dest.x = x; dest.y = y; dest.w = pixbuf->w; dest.h = pixbuf->h; SDL_BlitSurface(pixbuf, NULL, screen, &dest);}когда тоже самое на пикрелейтед через обычные глобальные переменные все работает, видимо потому что еще функции (которые для каждого элемента приходится отдельную держать) инлайнятся.
>>1366938Включи пошаговую отладку, посмотри на каком вызове падет. Ну или тошни в лог, перед каждым вызовом. Смотри где падает.
>>1366938Потому что у тебя все переменные в структуре в стеке, ВОЗМОЖНО кроме img_t. Надо смотреть и ее описание, возможно там есть член требующий явной инициализации.
>>1366945> Ну или тошни в лог, перед каждым вызовом.жабаскрипты жабаскриптики так и делаюАлсо:loadIMG: music 28x33loadIMG: info 32x32loadIMG: vol 65x32drawIMG: vol 0x0 x:0 y:480drawIMG: info 0x0 x:0 y:480То есть то что я и подозревал - когда я вызываю btn_init(Button1) оно внутри с копией структуры работает внутри а на глобальной структуре это никак не отражается.Надо как то правильно через поинтер в функцию ссылку на структуру передавать>>1366946> ВОЗМОЖНО кроме img_t. Надо смотреть и ее описание, возможно там есть член требующий явной инициализации.typedef void* img_t;Вот так вот оно в заголовке определено
>>1366950> Я честно говоря вообще не понимаю, как это у тебя компилируется.прикидываюсь clang -омпопробовал по твоему через struct _TAG_ Button1;тоже компилируется и тоже валится на том же месте, то есть и то и то примерно одно и тоже>>1366952А как правильно то? https://paste.ofcode.org/vi5TZjpwaZhLrLfGAv68BtКогдя я их использую он (компилятор) вечно пиздит
>>1366956static void btn_init(g_t btn) { btn->img = module_load_img( btn->path ); // модуль знает путь к папке с картинками btn->w = module_get_img_width( btn->img ); btn->h = module_get_img_height( btn->img );}static void btn_draw(g_t btn) { module_draw_img(btn->img, btn->x, btn->y, btn->w, btn->h);}
>>1366960Спасибо заработало.то есть корректный код для моего примера выглядит вот так https://paste.ofcode.org/GHjwTb99cprrU44Ru9j6WX
>>1366949Либо передавай в свой инит указатель, либо вообще нахуй убери и обращайся в интернете напрямую к баттон1,2,3, они у тебя все равно глобальные на какой-то хуй.
>>1366967Двачую, засунь переменные в начало мейна, ты все равно их в функцию передаешь, тогда в чем смысл глобальноститем более она тут вообще не к месту
>>1366979> обращайся в интернете напрямую к баттон1,2,3, они у тебя все равно глобальные на какой-то хуй.так и было изначально, но с этим неудобно работать, мне вот надо еще 2 элемента идентичных добавить и обрабатывать, надо опять каждой по хуевой горе переменных объявить и функций написать.Сабжевый код это упращенная версия>>1366980Пока (к сожалению) не могу, много где еще напрямую обращение идет, но когда код чище в нем уже лучше видно как можно так все организовать что бы они в глобальной области видимости не весели.
Тэк. Поясните мне один момент. Откуда берётся "С89 - тру, остальное от дьявола". Я сначала думал это такая толстота, но на лоре и в конфах частенько встречаю С89 бояр поливающих говном остальные стандарты и заявляя, что дескать после С89 остальное - это заливание анальное огораживание разработчиков.Чем С89 лучше С11?
>>1367032>Говноед, уходи>Выискивает куски в посте не относящиеся к теме >офтопит>подрывается>называет другого говноедомпиздуй обратно в /b, бiдлона лоре хотя бы тебя не пидорнут с форума за отказ лизать жопу макаке и на любую нетривиальную проблему распишут разжеванные тома
Подскажите тупому дебилу, как слинковать правильно:В main.c:#include <hiredis.h>В /usr/local/lib:libhiredis.a libhiredis.so libhiredis.so.0.14В /usr/local/include:hiredisgcc -L libhiredis -o main main.cmain.c:2:10: fatal error: hiredis.h: No such file or directory #include <hiredis.h> ^~~~~~~~~~~compilation terminated.
>>1367036если запуститьsdl2-config --libsто он выдаст вот такую хуйню-L/usr/local/lib -lSDL2sdl2-config --cflags-I/usr/local/include/SDL2Надеюсь тебе это поможет
>>1367036>ПодскажитеНо зачем? Ведь если тебе подскажут, оно заработает, а значит пердолингу конец. Пердоля против пердолинга, ты сам себя отрицаешь.
>>1367038Ничем не помогло. Вот ldconfig:>ldconfig -p | grep hiredis>libhiredis.so.0.14 (libc6,x86-64) => /usr/local/lib/libhiredis.so.0.14>libhiredis.so (libc6,x86-64) => /usr/local/lib/libhiredis.soПока компилю через жопу:gcc -o main -I./hiredis main.c hiredis/libhiredis.a с самой либой в директории
>>1364241Напиши сначала как в книжке Господа нашего http://www.cypress.com/file/56651/download, калькулятор с польской нотацией юзающий стэк тянешь знач. из стека пока не будет операция - выполняешь операцию над числами и суешь обратно в стэк, парсер легчайше сделать для такой хуйни.
Как канонично получить строку из функции? Грубо говоря аллоцировать в main и передавать указатель в ф-ию, потом в main делать free()? https://ideone.com/igkm1bМожет, вообще в какой-то книге можно почитать про такие базовые best-practice по Сишке?третий день пишу на си
>>1367099По хорошему удаляй в том же скоупе, что и выделяешь, чтобы все было более менее наглядно или делай подобие ООП с конструктором и деструктором, только все равно деструктор придётся ручками дёргать.
>>1367108>>1367109Все бы хорошо, да только годится исключительно для ненужных функций (функция, которая возвращает константу, является ненужной по определению). А менять состояние функции через static без поломок можно только до первой многопоточности.
>>1367194Читал первую, лайтовая приятная книжка. Легко читается, легко понимается. Моя первая книга по си, могу сказать что ок.
>>1366860Там же (?) пишут, что под PS2 (не говоря о более ранних консолях) было намного жестче (типа постоянный стриминг с DVD, постоянная загрузка/выгрузка текстур в мизерную видеопамять с основной несколько раз за кадр), хуже тулинг, вот это все. Железка крайне любопытная кстати https://hwdocs.webs.com/ps2https://www.youtube.com/watch?v=PvK2nVMKEQ4
>>1367392только вчера сам об этом гуглилнадо вот так вот делатьsrand( time(NULL) );зкштеа("random: %d ", rand() % 10); // => 0...10
>>1367406Это в учебнике который я читал написано про это что надо через переменнуюtime_t t;srand(time(&t);И дальше уже используешь rand().
>>1367392Если интересует почему так, то потому что статические (т.е. компилируемые без рантайма) языки так устроены что никакого рандома быть не может.напиши ка цикл или алгоритм который рандомно числа подбирает - не сможешь. Тебе так и так надо какое то стартовое значение которое должно меняться, но в бинарнике же ты не можешь значение менять (в зависимости от запуска итд).>>1367408Да блять выкинь ты нахуй этот учебник, открой документацию нормальную и смотри http://www.tutorialspoint.com/c_standard_library/c_function_time.htmФункция time из стандартной библиотеки, принимает в качестве аргумента поинтер то есть туда нахуй что угодно можно сунуть, если указатель указывает на ноль то он возвращает 1 января 1970 в милисекундах#include <time.h>int main() {char \*t = {0,0,0};long int a = time(&t);printf("time: %li %li\n", t, a);}
Как делать массив указателей на функции?Все функции void, аргументов нет.Пробовал void (mas[8])() = { &f1, ... } - на каждую данную функцию ругается "ссылка на неразрешённый внешний символ _f1 в функции _foo" в файле file.objБез амперсанта то же.Если сделать так:void (mas[8])();mas[0] = &f1;mas[1] = &f2;...то та же ошибка, но не ругается на нулевую функцию.typedef void (funcs)();funcs* mass[8];не помогает
Бля как вы под шиндошс конпеляете? Этож пиздец какой то, нашел вроде аналог macbrew/linuxbrew (chocolatey) а там надо блять некрософт повершел 2.0, а ему надо нетхренворк 4+, а чтобы блять поставить нетхренворк 4+ надо блять через обновления эти ебучии установить 4.0, потом оно перезагрузится, потом 4.5, опять перезагрузится потом 4.6.1 потом 4.6.2 и так до последней версии и каждый раз чето блять качает и ставит по пол часа.Как с этим блять работать то вообще?
>>1367580> Mingw64Надо им было переименовать проект когда форкали, а то все ссылки видут на обычный mingwА пакетный менеджер там есть хоть какой то? А то блять какой не возьми они все на повершеле поголовно, ну в чем проблема взять руби или пистон тот же ну нахуя опять завязывать свои приложения на МС поделия, ну ничему вообще люди не учатся.
>>1367605> Cygwin> лучь светаПоспешил с выводами, такое чувство что мне проинсталировали дебиан скомпилированый для винды.Говно короче.
>>1367627Пердоли как всегда, писать программы на Си -не пишем, лучще попиздим про кривые костыли, изображая ложную активность.
Это какой то идиотический пиздец, в этом повершеле нельзя скопировать текст он просит перезапускаться для продолжения работы с установленной программой, и ни один пакетный менеджер не устанавливает пакеты (chocolatey, Scoop)>>1367630> писать программы на Си -не пишем, лучще попиздим про кривые костылиА толку их писать если их проверить нельзя
>>1367411> потому что статические (т.е. компилируемые без рантайма) языки так устроены что никакого рандома быть не можетШто? Это-то тут при чем? Тру рандома вообще быть не может, а какой-нибудь твой пхп просто сам делает srand().>>1367621Двачую, лучшее решение.
>>1367682так и gem и npm есть но мне же надо dev хидеры и либы типа libogg libsdl ...Просто ведь вопрошаю чем под виндой люди пользуются, как под нее разрабатывают, где компиляторы, мейк все вот это берут как код собирают итд. Это ведь самая распространенная ос программ которых под винду нет наверное можно на одном диске сложить и в ней что, нихуя нет и не придумано ничего для автоматизма и удобной разработки?Я не верю в это, не хочу верить. Не хочу верить что в 2019г мне придется ходить сейчас по сайтам и качать инсталяторы архивы того что мне надо для сборки потом открывать документацию и курить как же в винде пути устроены там же не сделаешь cd ~project/ && make
>>1367709> Просто ведь вопрошаю чем под виндой люди пользуютсяmingw-w64, ответили уже. И Visual Studio еще. У крупных проектов обычно есть готовые проекты для VS, ей и собирают (msbuild все дела). Детектится по использованию ucrt, например.> мне придется ходить сейчас по сайтам и качать инсталяторы архивыОдин инсталлятор. msys2. Внутри обычный pacman, которым ты ставишь компилятор и либы. В его же консольке собираешь либы, которых в бинарном виде не завезли.
>>1367664> Што? Это-то тут при чем? Тру рандома вообще быть не может, а какой-нибудь твой пхп просто сам делает srand().Ну во первых не мой, хотя мне нравится пхп как яхык за исключением некоторых вещей,Во вторых инструкции типа srand ни в одном известном мне процессоре тоже нет.
>>1367755mingw-w64 я уже качнул, но что то у меня там неправильно поставилось, msys2 на первый взгляд то что нужно, но пока не трогал, завтра попробую его и мингв через него. Но мне кажется паке тов там раз два и опчелся, но посмотрим.А вижуал студия платная же да и проект на опенсорцные либы и флаги гцц/шланг завязан, это чисто для шинд-онли коммерческих приложений.
>>1367770> Во вторых инструкции типа srandПотому что srand() это функция сишного рантайма, с чего бы ей быть инструкцией? И пхп до 7 вроде версии просто обращался к сишным rand()/srand(). Обычно (псевдо)случайные числа генерируют программно, но еще есть специальные железки для криптографии и есть инструкции типа rdrand в x86, там в качестве источника энтропии используются датчики и внутреннее (непредсказуемое) состояние, поэтому задавать seed не нужно.>>1367776> я паке тов там раз два и опчелсяДа. Если что-то не очень распространенное - собирай сам. На самом деле, если тебе вот прямо совсем не хочется собирать лишнее говно самому, кросскомпилируй из-под федоры - у них больше всего готовых девлиб под винду в репозитории.> А вижуал студия платная же Community бесплатная, платные фишки для сборки не нужны. Весит только много, даже если build tools качать, это да.
>>1367781> Потому что srand() это функция сишного рантайма, с чего бы ей быть инструкцией?srand это функция стандартной библиотеки которая после компиляции превратилась в инструкции процессору и обречена выдавать статически предсказанный результат. Ты никак не можешь на это повлиять этот код исполняется на железеА рантайм он компилирует (превращает код в инструкции) во время исполнения, и по нескольку раз еще потом гонят с оптимизациями и деоптимизациями. Если даже сишная rand() после каждой компиляции программы другие числа начинает по кругу гонять, то тут то нахуя какие то srand(time(NULL)) придумывать? Где логика?> is an instruction for returning random numbers from an Intel on-chip hardware random number generator which has been seeded by an on-chip entropy source.[2] RDRAND is available in Ivy Bridge processorsОх лол вот это я обосрался (хотя на самом деле обосрался интел со своими нейросетями в процессорах)
>>1367825> srand это функция стандартной библиотеки которая после компиляции превратилась в инструкции процессору и обречена выдавать статически предсказанный результатОна ничего не выдает, она void возвращает, привет.> А рантайм он компилирует (превращает код в инструкции) во время исполненияДля выражения типа state ∗ 1103515245 + 12345 абсолютно похуй, какие там были оптимизации, и когда именнно его превратили в машинный код. Оно вычисляет следующее состояние ПГСЧ (следующее случайное число), и его результат целиком зависит лишь от state. И вот как раз state и устанавливают с помощью srand.Причем это сделано не потому что просто так получилось, или потому разработчики языка дебилы, а для того, чтобы результаты были воспроизводимыми, когда ты будешь тестировать свой говнокод (передаешь в srand() одно и то же число, или запоминаешь, что именно ты туда передавал в прошлый раз).> Если даже сишная rand() после каждой компиляции программы другие числа начинает по кругу гонятьНе начинает, в этом вся суть. Если не вызовешь srand() вообще, то будет одна и та же последовательность, которая зависит от реализации генератора. И насчет круга ты тоже слегка загнул. Даже у линейного конгруэнтного генератора выше период последовательности 231.
>>1367880Это ты, наверное, еще не знаешь про denormals, сорта NaN и про разную псевдо-хуйню у long double в x86.
Ребят, я совсем нуфаг в программировании. Чем компиляторы отличаются друг от друга? вообще я доблаёб, мог бы и загуглить, пойду этим и займусь
>>1367927Функционал компилятора выходит за рамки того, что продиктовано стандартом. Вот в этом всем и отличаются.
Здравствуйте. Сделал задачку Пратовскую, пирамидку.Укажете на ошибки? Подскажите еще пожалуйста как с массивом со строчкой из букв сделать можно программу, или там придется переписывать?https://pastebin.com/EARV37u4
>>1368027> Укажете на ошибки?С -Wall собери, компилятор сам укажет. Алсо, ты задачу не привел, хуй знает, что ты пытаешься сделать. Алсо, пробелы можно одним printf-ом выводить: printf("%*s", 10, "").
>>1362799 (OP)Задачка со звёздочкой.Все мы знаем, что с помощью поразрядных операций можно установить, сбросить, инвертировать отдельно взятые биты одной инструкцией, не изменяя остальные биты, например, в некой 8-битной переменной tepm: char temp; >переменная temp |= (1 << 5); >установить пятый бит переменной, не изменяя остальные temp &= ~(1 << 4); >сбросить чётвёртый бит переменной, не изменяя остальные temp ^= (1 << 7); >инвертировать первый бит, не изменяя остальныеТакже можно устанавливать/сбрасывать несколько битов сразу, не изменяя остальные, например: temp |= ((1 << 5) | (1 << 3)); temp &= ~((1 << 5) | (1 << 3)); temp ^= ((1 << 5) | (1 << 3));Вопрос: как одной инструкцией с помощью одних лишь побитовый операций, не прибегая к использованию функций, одновременно установить и сбросить несколько битов, не изменяя остальные?
>>1368152> инструкцией Пиздец перевод. Это кто, прата?> char temp; >переменная> temp ^= (1 << 7); >инвертировать первый бит> первый битПиздец перевод. Алсо, запись значений больше SCHAR_MAX в signed char - implementation defined.
>>1368152Один бит это единица. Если нужно несколько бит, меняешь единицу на число с нужным расположением и количеством бит.
>>1368145>С -Wall собери, компилятор сам укажет.Огромнейше благодарю. Одно выражение не имело смысла. Удалил, скомпилировал с C-wall и ошибок не обнаружено.Нужно было создать с помощью циклов расширяющуюся пирамиду до введенной заглавной буквы.
Че-то у меня наитупейший вопрос (как-будто 2+2 разучился складывать). Чистить надо же только после calloc, malloc, etc? Если я просто поинтер ебанул (int* p = &jopa), при выходе из области видимости православно рипнется и p и jopa?
>>1368615Да, вручную освобождать нужно только то, что ты вручную же и выделил. Ну или если тебе какая-то либа выделила.
>>1368629В каком проекте? Почему это должно как-то отличаться от C++, по твоему? Просто собираешь .asm в .obj и линкуешься к нему. Если IDE, то куда тыкать, зависит от IDE, а ты ее не указал.
>>1368659А погуглить? https://stackoverflow.com/questions/33751509/external-assembly-file-in-visual-studio
>>1368700Что за бред, при чем тут C++ вообще? Или тебя смущает extern "C" в декларации? Просто убери, и все.
Пацаны, объясните мне тупому почему мой код по сортировке выбором в двумерном массиве не работает? https://ideone.com/k8SWKL
Почему если я пытаюсь преобразовать 6.0 в 6, то получаю 5, хотя с остальными числами всё в порядке? Как это исправит? Преобразую через цел_пер=(int)вещ_пер.
>>1368911Добавляй 0.5 если тебе нужно округлениеПривыкай к костылям, числа с плавающей точкой это те еще сволочи
Вот мой тот самый код с 5 вместо 6, который я исправил. Как сделать его менее говнокодистым?https://ideone.com/OBGEN8Нельзя использовать что-то кроме stdio.h, нельзя массивы и циклы. Вроде это все нельзя, остальное можно. Ебал в рот тех, кто придумывает такие задания.
Решил сделать калькулятор и убил на это целый день. А ведь тут даже указателей нет. Что же дальше то будет
Мужчины, поясните по хардкору, чем рекурсивный спуск лучше обратной польской нотации при написании калькулятора?
>>1368966Потому что современные программеры — макаки, а чем меньше кода надо писать, и чем меньше задумываться над своей поделкой, тем больше макака рада.
>>1368966Рекурсивный спуск имеет в своей основе представление о формальных грамматиках, так что это более общее и намного шире применимое решение.
>>1368964>целый деньЯ уже много дней бьюсь по несколько часов. Пока сделал только базовую арифметику, скобочки, степень, остаток от деления и целочисленное деление. На этом пока остановился, так-как знаний маловато, буду вникать в теорию, а потом продолжу.https://pastebin.com/ng3s7h61>>1368966Рекурсия легче, не надо самому динамически выделять память, но труднее ловить ошибки.
>>1368979>чем меньше кода надо писать, и чем меньше задумываться над своей поделкой, тем больше макака рада.Лол,обычно это называют эффективность.
>>1369015Ребята, вы делаете пиздецкий говнокод. Пожалуйста, прочитайте КиР перед тем как что-то постить в этот тред. Проделайте все (ну хотя бы процентов 70) упражнений. Это займет у вас месяц при неспешном чтении. В результате вы разберетесь и в построении калькулятора, и в работе со строками, и в сортировке и даже в работе динамической памяти вместе с работой в файловой системе.Нужно внести правило банить любого, чей вопрос обсуждается и решается в K&R.мимо читавший второкурсник
>>1369021>страдайте хуетой месяц, и только потом программируйтеКлассный способ отшить любого, привив отвращение к программированию.
>>1369025Я не говорю идти читать ебаный стандарт, это охуенная книга с кучей практических заданий, а не попыток этих неумех собрать из лего истребитель.
>>1369028Это книга специально для вкатывания и написана. Калькулятор там как раз и разбирается где-то в 4 главе
>>1369027Книга это хуета с хуетой. Интересно решать левые плешивые задачки только тому у кого собственных задач нет, то есть нет интереса к программированию, а вместо этого только фетиш на учебу.
>>1369032Наверно решать интегралы и считать плотность вероятности ты тоже учился на практике и без грамма теории, да?Не неси хуйню, это серьезный яп системного уровня, а не петухоскрипт. С таким подходом когда он дойдет до работы с памятью ему ничего не останется как жидко пернув умереть
>>1369034Тупая аналогия. Раблта с памятью это просто, совсем не нужно ничего зубрить как с формулами, нужно только понять, а для этого не нужно не только знаний, но доже ума, реально тупой справится. нужно только желание понять, а не писать хуйню вслепую. Но с последним отношением, опять, значит к программированию нет интереса.
>>1369038Может и достаточно, я начал с неё и несмог в неё совсем. И есть мнение что не я один. Прочитал перри и сейчас читаю прата.
>>1369021А мне нравится мой говнокод. Для вас может смешно, но для меня это первая более-менее крупная программа на Си, которая работает и уже была успешно использована по назначению.
>>1369045Читаю сейчас "Язык программирования C. Лекции и упражнения, 6-е издание" Прата. По ощущениям написано очень растянуто, зато всё понятно.калькуляторщик
Пролистал Перри, прочитал оглавление Прата.пиздец пиздец пиздецВам реально в кайф жрать 1000 страничное дерьмо вместо книги на 200 страниц от создателей языка и по совместительству людей, написавших unix? Охуеть, не хочу учить как деды и байтоебы, хочу хвастаться перед мамкой количеством страниц. Поссал на вас.
>>1369056Да, есть такое. Хоть на дваче могу побыть чсв-уебаном, а ирл я полуметровый няша-стесняша :3
>>1369052Сейчас современность, поэтому начали с современного чтива, а олдовую книгу от отцов-основателей тоже почитаем, когда руки дойдут, не волнуйся.
>>1369052Зачем мне читать кривой манула дидов если есть благородная книжка где все не торопясь и обстоятельно изложено? Ем флорентину, попиваю джек дениелс и покуривая сигару читаю перед камином, а ты завидуй плебей.
>>1369091Могу позавидовать. Слабоумные более счастливы. А дедовские книги не кривые. Просто написаны в то время, когда комп был не у каждого примата, а только у тех, с кем можно поговорить как с homo obrazovannies, а не кормить тысячами страниц, от которых мозг отключается. Учил по K&R и не чувствовал себя кретином, сосите залупу, честь имею.
>>1369100Ну раз ты так учил то конечно все так должны учить, дед. Все кто не так учат неучи и балбесы. Ппц ты песком сыплеш, старпер.
>>1369025Бедняжка. Небось, мать наехала "вон у Ленки-то сын за 2 недели программизм освоил и дом родителям купил, не то что ты, нахлебник..."Труъ-кодеры всем скопом поссали тебе на лицо, оставив немного для следующего анона, кому тоже месяц (не 5 лет, не год даже, а МЕСЯЦ БЛЯДЬ) учебы - унижение. У гуманитариев понятие глубины, видать, из коробки поломано.
>>1368918Что за пиздец, без циклов и всего остального это вообще выглядит как несвязанный шизофазический бред, странный у вас препод.
>>1369045>>1369021Хуй знает, я вообще особо си не учил, так было полкурса в универе, перед плюсами, вот их более менее учил, в основном по курсам с ютубчика, пробовал читать какую-то книжку, осилил страниц 200 может, потом забил хуй.Но я очень быстро информацию усваиваю, может в этом дело.кернел-дев-20-лвл
>>1369137Мои комиты есть в ядре линукса, да и на работе я драйвер пишу, собственно связанные с ним патчи туда и отправляются, шутник.
>>1369138> комиты есть в ядре линуксаЕбать ты говномес, ты уже понял, что ядро линуха это показатель того как не нужно разрабатывать ПО?
>>1369139Общий уровень кода так себе конечно, благо я работаю не надо самим ядром, а просто портим драйвер в апстрим периодически.Но как опыт для первой работы я щитаю довольно хороший.алсо помимо линуха ещё QNX дёргаю, в теории можно ещё DPDK и Винду потыкать
>>1369140>QNX дёргаю, в теории можно ещё DPDK Чому L4 не дергаешь и прочие ядра созданные инженерами?
>>1369141На самом деле я даже не знаю, что этону видимо пока кастомерам это не нужно, да и вообще вряд ли будет нужно, учитывая что мы мультигиговый езернет разрабатываем как бы, вероятно поддержку вайфай 6 тоже будем делать совместно с квалкомом, а QNX очень даже, на нем весь аутомотив будет держаться, поэтому и пилим.
Задал похожий вопрос в плюсотреде. Зачем писать на сях, если есть нативный интероп с растом? Пишите весь новый код на расте и интегрируйте его в существующие проекты. (Это не касается embedded, тут раст пока не стабилен)
>>1369149Удобнее обработка ошибок, строгая, статическая типизация, проблемы с памятью решаются на этапе компиляции, darta races отлавливаются на этапе компиляции, алгебраические типы данных, статический полиморфизм, макросы получше, производительность такая же, можно юзать уже существующие библиотеки на C и C++.Короче 0 минусов, одни плюсы.
>>1369151>Статическая типизация Поехавший? Ты в си треде если что, а не в треде КулСмузиСкрипт2010. >Проблемы с памятью Какие проблемы с памятью?
>>1369153Акцент на строгости типизации. Я в курсе, что в сях она статическая, лол. Хотя с учетом того, что в реальном сишном проекте ехал void через void и другие веселые касты для имитации ооп, то от статической типизации тут одно название.И не надо строить из себя целочку, мол память не течет, не бьется и вообще все заебись. Тонны тулинга для битья кожаным мешкам по рукам существуют не от хорошей жизни.
>>1369157Реальный сишный проект не пишется с нуля, а переписывается с прототипа что бы было очень быстро
>>1369159Спасибо, кеп..Только зачем ты это написал? Я же пояснил выше, что не в embedded и на популярных архитектурах у C нет преимущств ни в чем. Даже в скорости.
>>1369162Спасибо, Раст создавался под Файервокс, это тормозящее говно я удалил со всех устройств, в какой там ембедед вы еще хотите я не понимаю.
>>1369164Я тоже FF не пользуюсь, но я гуглил бенчмарки последних версий FF, куда намержили подсистем на расте из servo. Так там все +/- как в хроме с производительностью
>>1369157> ехал void через void и другие веселые касты для имитации оопkek тоже прям сразу в глаза бросилось, и потом когда программа падает непойми из за чего приходится консоль-логами фпринтами ловить.Си,Сипп, жс три брата акробата, костыльные во многом и архаичные но каждый в своей области мэинстрим.
>>1369148А нахуя мне раст? Вот потихоньку на Си пилю валидатор некоторых файлов текстовых. Процесс вполне идет, не вижу причин менять язык.
>>1369199Ужасно. Валидатор текстовых файлов это не программа, кроторую сделал и люди пользуются, а задача для скрипта. Текстовые файлы постоянно меняются, и ты будешь на каждый пук пересобирать свой высер? Я уже не говорю, что там кода нагорожено, кроме тебя никто не разберется. Короче, тут два варианта, либо ты умный мудак, который специально делает такое говно защитить свою незаменимость, либо необучаемый колхозный идиот, которому лень изучить лучший инструмент под задачу.
>>1369202А я и делаю для себя, в общем-то. С перспективой допила в нормальный редактор файлов такого формата. Для души, короче. Ну и я необучаемый еблан, который как встретил Си, так на нем и застрял
>>1369203>спойлерЯ тоже, лол, но тут нечем гордиться.Хотя, по правде, писал и на вижуал бейсике, джаве, решетке, но в конце концов мне нужны в основном программы, и тут только сишка нормальная, а для скриптообразных задач вроде программ для работы через веб-парашу, решетка удобнее, я ебал пердолиться на сях с этими сетевыми запросами. И решетка по крайней мере хотя бы экзешники делает как у людей, работающие терпимо, хоть и медленнее.
>>1369148Тыкал палочкой в раст, не понравилось что хелловорд весит два метра, а то и больше. Го тоже выдает столь же жирные хеловорды. Ди выдает чуть поменьше - 300 кб, но там сборщик мусора хоть есть, а что впихнули такого жирного в раст - не понятно. А на няшной всего два килобайта получается на tcc и 30 на gcc. Кресты не пробовал, но там вроде тоже всё няшно.
>>1369207А сях тоже анальные функции, те же яйца, даже выглядит одинаково. Никто ведь не заставляет лепить функции на каждый пук, как и классы и тем более иерархии. Только дебилы лепят говно потому что оно есть в языке. Просто считай что название и скобочки это условный символы для обрамления кода, и всё, никаких проблем, ооп, функций, и прочего ненужного говна. Просто спроси себя: "Язык для меня, или я для языка? Кто главнее, кто кому подчиняется?" и будет ясно чмо ты позорное или человек.
>>1369226Си это системный, машинный язык. Какой код написал, такой и получил.Раст это веб-параша. Декларативная хуйня для определенных действий, а какой там будет код всем похуй. Вебмакакам похуй на код, у них хозяин богатый, если будет тупить/тормозить просто добавит еще серверов.
>>1369226Херово тыкал, че. Я тоже удивился от бинаря в полтора мегабайта на одном принте в консоль. Когда как у С и С++ выходит по 8кб. Минутный гуглеж и раст тоже выдал бинарник в 9кб.
>>1369262а на асме меньше 1кб, ибо main НИНУЖЕН нахуй, под меткой _start: отпечатываешься и милости просим exit 0) Эх, аж плакать хочется...
>>1369274Да похуй как-то. Я лучше залинкую libunwind и стандартную библиотеку(те самые полтора мегабайта), получу производительность как на асме, чем буду экономить сраные полтора мегабайта, пердолиться в десять раз больше и получить ту же производительность. Полтора мегабайта, в которые входит куча полезных библиотек, которые нужны всем и всегда, это не 30мб у джавы, в которые напиханы даже аллах и твоя мамка
>>1369281>это не 30мб у джавы>почему вы так плохо живете?>а хохлы еще хуже!Это не ответ, а виляние жопой, лишь подтверждающее.
>>1369287Т.е. неудобность разработки и отстутствие уверенности в сесурности написанного кода - это нормально, а 1.5мб бинарника - ето плохо. Если что, раст по умолчанию линкует все статически, в 1.5мб залинковано много всего - stdlib, libunwind, pthreads и другое. Если ты в сях юзаешь динамически эти либы,то ВНЕЗАПНО в памяти процесса будут загружены все те же либы. Да, они будут шариться с другими процессами, но все же. Я уже написал, что в расте можно линковать динамически и тогда все будет как по дефолту в С
>>1369290>Т.е. неудобность разработки и отстутствие уверенности в сесурности написанного кода - это нормально"Уверенность" это мемчик дебилов, заменяющий мышление. Для таких есть Питон, уверенный язык, вот и нахуй иди в свой загон.
>>1369301В расте на этапе компиляции работает статический анализ. Ты разве не юзаешь его в своих проектах? А санитайзеры? Если нет, то ты максимум лабу в универе пишешь и дальше общаться я смысла не вижу. Вообще все мои сообщения адресованы сеньерам, которые по какой-то причине еще не читали/думали над внедрением раста. ты явно не входишь в их число, так что можешь идти нахуй
Давайте ебаться в жопу, это удобно и практично. Вот ты не ебешься в жопу почему? Ебись в жопу, это модно.
>>1369306Блять, ебанат, ты понимаешь что в си проектах люди юзают свои либы? А уж особенно эмбедщики, пишущие, можно сказать на совершенно другом языке. Твой Раст это пердеж для хипстеров-уебанов без образования. И не надо сейчас пукать что нинужно, лучше просто съеби.
>>1369310>>1369313>>1369317>>1369309>натужно шутим, потому что посуществу аргументы не придумываются>>1369312Про эмбедед я ни слова не писал, раст еще сырой для этого.Про либы - я не понял, к чему ты это высрал. Либы можно не выкидывать, вызывать из раста сишные либы, а из С - растовские. Интероп же. unwind, stdlib и прочее можно не юзать, никто не заставляет. Просто это удобно и накладных расходов мало.
Ну и что с этим делать? Происходит это на обычном принтфе, при том какое-то кол-во этих самых принтфов проходят нормально, но после определенного такая хуйня.
>>1369425Варианты:- Долго и нудно дебажить код, выставляя memory breakpoints- Запустить PVS-Studio или аналог- Юзать санитайзеры (intel inspector, appverifier, встроенные в clang(если можешь скомпилить под него))
>>1369425Так может ты нам принтф покажешь, а не кишки crt? Хотя у меня такое чувство, что ты как-то CRT ломаешь, а printf просто не повезло обращаться к сломанному.>>1369443> Как индекс может быть -1?А почему нет? Тебе важно лишь не вылезать за пределы объекта при обращении к памяти.char array[3] = { 'a', 'b', 'c' };char ∗parray = &array[1];printf("[0] = %c, [-1] = %c\n", parray[0], parray[-1]);
>>1369670В обсуждаемом выше скриншоте анона это сделано, чтобы EOF (-1) можно было передавать в ctype-функции и получать при этом валидные результаты. Да, можно было прибавлять 1 везде при обращении к массиву, но пришлось бы писать комментарий об этом в коде, который обращается и при объявлении этого массива тоже пояснять, почему там элемент для '\0' по индексу 1. (Просто предположение; не знаю, чем там у Microsoft думают.)
Двач, можно ли как-нибудь покороче проверить равна ли переменная ряду значений? Не вот так: if(variable == 0 || variable == 1 || variable == 2){}, а как-нибудь так: if(variable == 0, 1, 2){}?
>>1369823У gcc/mingw есть рейндж расширения стандарта для кейсов, можно писать типаswitch (val){case 0 ... 2:case 10://break;default://break;}
>>1370013> сишка примитивнаНу так и заебись же, легче того же питона в освоении.Поделитесь хорошей либой-хедером с ассертами
>>1370034> либой-хедером с ассертамиassert.h, чего тебе там не хватает?>>1370059Ты можешь свободно линковать код на C11 и C89. Лишь бы стандартная либа в последнюю версию могла (в основном из-за всяких _Thread_local для errno и т.п., хотя оно и до стандартизации у всех было).
>>1370095У openssl, наскока я помню, свой эррор хендлинг, и в потоки она не может, т.к. технология под std99 сделана, поэтому тут с 17 версией, где потоки уже дефолт могут понадобится костыли в большом количестве. С 11 все точно ок должно быть
Поясните какого хуя у меня вот эта хуйня пишет только последнее значение в массиве т.е для i=9 ? for (i=0; i<9; i++); { printf("%c \n" , buffer); }
>>1370172#include <stdio.h>#include <time.h>int main(void){int i=0; time_t timer; char buffer[26]; struct tm* tm_info; time(&timer); tm_info = localtime(&timer); strftime(buffer, 26, "%Y-%m-%d", tm_info);Ну а дальше идёт как раз цикл for. Переделал его под while и все нормально работает. В чем дело?
>>1370179#include <stdio.h>#include <time.h>int main(void){ int i=0; time_t timer; char buffer[26]; struct tm* tm_info; time(&timer); tm_info = localtime(&timer); strftime(buffer, 26, "%Y-%m-%d", tm_info); for (i=0; i<9; i++) printf("%c \n" , buffer); return 0;}
>>1370167Переменная buffer содержит адресс массива, в принтфе ты 9 раз выводишь первый байт адреса в виде символа. Иди читай документацию по принтфу.
>>1370181Это куда? У меня же и так printf ("%c \n", buffer[и]); и по условию он должен и так меняться.
Читаю и так и не понимаю зачем нужны указатели. Думал может прата почитаю и пойму но там какая-то словесная дрисня в стиле указываем указателем на указываемое. Ехал масло маслянное. Возникает ощущение что переводчик поклал и перевел транслитом вообще не вдумываясь написанное.
Пиздец говнокод блять. Выведи уж тогда через &buffer[i * 1] если ты уебан со скриптопарашей головного мозга
>>1370207Это не то что мне нужно. Мне нужно выводить по 1 элементу массива, а не весь целиком. Вот так надо.Да и ты не решил проблему, а просто обошел ее мимо. Почему цикл for не работает как надо?
>>1369237>Вебмакакам похуй на код, у них хозяин богатый, если будет тупить/тормозить просто добавит еще серверов. Вебмакакам как раз не похуй - их код запускается у конечных юзеров в том числе и на некромобилочках с засраным ведроидом пятилетней давности, и если у их заказчика клиенты не закажут доставку сраной пыццы, потому что зависло на смартфоне - то их ждет долгая анальная неделя.
>>1370226Блять идиот, потому что тебе нужно вывести элемент n по адресу &buffer[n1] (n++) или str (str++), а ты пытаешься вывести в каждой итерации весь массив со спецификатором const charКороче иди нахуй И да если ты хочешь чему-то научиться, в первую очередь выбрось принтф из своего кода
>>1370245заебал, ты из какого языка такой прикатился сюда, что ты не можешь массив вывести сука?https://wandbox.org/permlink/5tseLtkRjIJalAGEна нахуй и съеби отсюда
>>1370229>>1370221>>1370230>>1370233Какого хуя в треде одни агрессивные уебаны? Пришел новичок спросить в тред, а его вместо помощи хуями облажили. Хуею с треда.
>>1370251я даже написал в стиле твоего дохлого питона чтобы ты глазьки свои бедьненькие не сломал уебан не способный поставить нужный спецификатор в принтф
>>1370227Причем тут это? Автор дебич берет тему указателей, которая и так сложная для нубов, а потом говорит вот есть многомерные массивы давайте еще тут про указатели чтобы было окончательно непонятно если вдруг было понятно, и тут же еще начинает затирать за уровни косвенности. Вот зачем так делать?
>>1370262Что нахуй может быть непонятного в указателях? Указатель = переменная с адресом. Все. Что вы там сложного находите блять?
>>1370274Не вместо, а когда в машинном (не человекочитаемом символьном) виде надо данные в голову файла загнать, например.
>>1370272>Что вы там сложного находите блять?Нубы не мыслят критериями адресов в памяти.>>1370270>>1370275Хуй соси, токсичная манька. Тебя видимо питоноеб с утра выебал и поэтому ты такой агрессивный.
>>1370274Вот, например, мой велосипед, который сугубо Хаффменовским кодом сжимает буржуйские тексты в среднем почти в 2 раза. Что бы я делал без fwrite()?https://github.com/PolazhinetsA/univer/blob/master/kod.c
Хочу слинковать несколько объектных файлов, написанных на разных языках, в один исполняемый файл. Работаю под виндой. Какие есть аналоги ld и make для винды с возможностью задать скрипт линкера в том же формате, в каком его пишут под линуксом? Cygwin не нужен.
>>1370220тащемта все легковот у тебя есть переменная допустим char anus со значением "jopa"и есть переменная-указательchar (star)dirka, ты можешь присвоить ей значение, находящееся по адресу переменной anus (star)dirka = &anusТеперь твоя переменная (star)dirka содержит указатель на ячейку памяти, в которой хранится переменная anus.Теперь, чтобы не ебаться с первой переменной, ты можешь передаватб нескольким функциям указатель на анус, и они смогут найти по нему твой anus и расширить твою жопу с jopa до joopa.Таким же образом, если, допустим, anus - это важная переменная записывающая в себя кучу флагов по всей программе, ты можешь задавать поинтеру точный адрес внутри ануса, зная, что в этом месте массива запишется какая-то инфа, которую тебе потом надо будет вызвать (star)dirka = &anus[n a]Ты так же можешь создавать массивы указателей. А можешь и создать n-мерный массив указателей, в котором будут лежать указатели на n n указателей на ((n n) * n)-мерные массивы указателей указывающие на w-мерные указатели.есть еще указатели в структурах. Если объект структуры является указателем, то обращение к нему происходит через стрелку list->next,если обхект структуры указателем не является, то обращаешься к нему по его местонахождению (т.е. разыменовываешь) через точку tvoya_jopa.shirinaеще можно создавать указатели на фукнции, и даже массивы указателей на функции, и можно даже их вызывать вместо функций, но я давно не пишу на си поэтому уже слабо представляю какой в этом смысл.короче поинтеры оч важная хуйня в ассемблере. выделил в каком-то месте память, запомнил его поинтером, а потом не заебываясь снес поинтер и пошел дальше своими делами заниматься.
>>1370309Хорош деанон, когда я сам ни капли не скрываюсь в тех местах, где подписан PolazhinetsA. Держи задачку посложнее. Тащи сюда фотки моего хуя с Reddit.
>>1370315Твоя мать полметровую линейку не тем концом приложила, вот и выслушиваешь потом "прикинь, сынок, спала с одним аноном, у него 12см, а ощущения на все 38"
>>1370274printf это не функция а макро алиас главной __printf__ функции. Вызывая прототип принтф, а потом и сам его сишник, компилятор только форматирует текст и понимает, что вызвана stdoutput часть большой __printf__ функции, затем, получив отформатированный однострочный массив, выводит его посимвольно. С write та же история, только памяти она потребляет в несколько раз меньше и сразу выводит посимвольно. Ах да, printf еще запускает функции рекурсивно, а аутпут от write будет только из зоны видимости.Ну и главный сдешний миф, что мол принтф хорошая вещь для дебага - полнейший бред. Большая часть ошибок на любом этапе работы с большинством C проектов из-за хуевого железа и хуевой памяти, с чем принтф абсолютно не поможет, а только усугубит проблемы
>>1370220я с праты тоже сразу ничего не понял, и забил, потом покукарекал в гейос, но там все еще хуже (субЪективно)
>>1370272> Что вы там сложного находите блять?То шо звездочка тама используется и при объявлении указателя и для получении значения по адресу, помимо ее математической функции. Запутаться можно.
>>1370300>вот у тебя есть переменная допустим >char anus со значением "jopa">и есть переменная-указатель>char (star)dirkaСпасибо, после объяснения уровня б стало чуть более понятно.
>>1370279Максимально нечитаемый код, форматирование do..while так вообще напоминает шутки о параллельном программировании. И коды у тебя неправильные.>>1370454ld из комплекта mingw. В этом треде где-то вверху обсуждали.
Не понял, что у вас с предыдущим перекатом получилось, но вот вам еще один:>>1370497 (OP)>>1370497 (OP)>>1370497 (OP)>>1370497 (OP)>>1370497 (OP)
>>1370545Ну я нормально не смотрел, но: сжатый-разжатый исходный код самой программы превращается в мусор. Размер минимального кода более чем один бит, хотя пробел должно было бы в один бит свернуть. Размер кода (вроде бы) не лимитируется - попробуй пожать и разжать текст, в котором частоты символов соответствуют последовательности фибоначчи (abccdddeeeeeffffffff ну ты понел).
>>1369148Ну и нахуй он нужен? На сях сейчас пишут только системщину и возможности языка отлично позволяют это делать без каких либо проблем. Еще раз повторяю, нахуй нужен раст то?
Почему все так плохо с вводом-выводом текста? Вместо нормальной библиотеки ввода-вывода куча printf, gets/puts, fgets/puts, gets_s/puts_s. Чтобы ввести строку текста надо знать 3 оператора с ньюансами их работы по выделению памяти, работе с невидимыми символами и еще всяким вуду. Зачем? Кто там пилил с11, это же полный пиздец. В итоге простая вещь как ввод строки превращается в мозгоебство. Вот нахуй так жить?
>>1362799 (OP)https://pastebin.com/THwTuhqfЕсть код реализации стека, вроде как все понятно, но зачем тут указатель на указатель? Объясните поподробней, если можете, как он тут используется.