Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002) Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994) "Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
>>1852735 >меньше оверхеда (да-да, даже vtable это индирект колл) Платишь за то, что используешь. Переизобретённое ООП в рамках С со структурой c указателями на функции — это тоже индирект колл.
Факты, которые ты привёл, верны. Но твой аргумент — invalid.
>>1852726 По тому что С хватает для своих задач и не надо разбирать весь сахар чтоб написать программу. >>1852737 За тем что С не хватает когда твой проект разросся и стал большим на столько, что ты сам выдумываешь плюсовый сахар вместо того чтоб взять готовый.
>>1852869 > ты сам выдумываешь плюсовый сахар вместо того чтоб взять готовый С плюсовым сахаром принято тащить кучу говна. Например, шаблоны. Например, исключения.
Которые позволяют в компайл тайме в миллиард раз больше того что может сраный препроцессор ссей и всё это с проверкой типов вместо ссяшной стрельбы из пулемета по ногам копипастой и мисюзом.
>>1853140 Если объяснять на пальцах, то ты в браузере читаешь текст выводимый через C-либу freetype и смотришь картинки через C-либы libpng, jpeg и так далее.
>>1853140 Шизанутый, сколько всего разного может "пользоваться" сишными библиотеками? Сколько всего может использовать сишные библиотеки? А сипипишные, а? То то же.
А ты, наверное, обычный js-тролль, который тааааак любит БААААЛШЫЫЫЕ СЫСТЕЕЕМЫ на js, да ведь, толерантный хипстерочек?
>>1853179 Ну тут ты немного не прав, многие С++ либы иногда могут иметь Сишный апи через extern "C" и описание функций, которые дёргают методы из классов. Впрочем, у всех языков ffi обычно ассоциируется с вызовом именно сишных функций.
>>1853169 Так, наверно, исторически сложилось, или из-за совместимости, или из-за линух-пердоль. Почему, кстати, они пишут на С?
>>1853179 Нет, но я вправду не имел дел с С/C++, поэтому пытаюсь понять. Суть не в том, чтобы система была большой, а чтобы программисту было удобнее и эффективнее работать. А железо уже давно слишком быстрое, чтобы разница в производительности была заметной.
>>1853187 Чтобы избежать лишних прослоек. Системщики - вообще страшные люди, крайне любят низкоуровневое программирование, байтоёбство и прочие вещи, которые всякие фронтэндеры считают ненужными и излишними. А Си тебе как раз дает относительно низкий уровень абстракции и, вместе с тем, крайне широкие возможности по твику и решению тех или иных прикладных задач. Я сам крайне охуел, когда у меня получилось на сях реализовать прогу для восстановления фотографий из RawData и парочку простейших фильтров для джипега. При этом, не было мест, в которых бы у меня был глобальный затык из-за непонимания парадигмы языка. Да-да, я тоже прошёл CS50.
Пойми один простой вещь. Когда ты пишешь на Питоне - помни, что под каждой твоей строчкой крутится полсотни строчек сишного кода. Да и не только на Питоне, лол.
А ведь чем ниже уровень - тем меньше вероятность глобально накосячить.
>>1853191 >А ведь чем ниже уровень - тем меньше вероятность глобально накосячить Наоборот: чем выше уровень, тем эффективнее и лучше отлажен код уровнем ниже. А сколько там строк для меня значения не имеет.
>>1853131 Скажи, а оно мне надо? Вот если у меня задача получать данные по спиайю каждые 100 микросекунд, брать бпф и выдавать спектр в уарт НАХУЯ МНЕ НУЖЕН ЭТОТ САХАР? чтоб больше запутаться? >>1853140 С для того где его хватает, частоты не важны. >>1853173 >не понял его предьявы к темплейтам. Они не нужны, если у тебя маленький деревянный код, они только будут мешать чтению.
Классы это структуры. Си с классами это Си, а не кресты.
А вот кресты это STL, эти аллокаторы, енумераторы и прочие говнокаторы, и джаваскрипт-однострочная дрисня с вложенными функциями. Короче любое говноскриптовое говно - черный ящик, которое хуй пойми как работает и в глазах программиста никак не соотносится к реальному коду - ассемблеру.
>>1853131 > Которые позволяют в компайл тайме в миллиард раз больше Да. Только что-то сложное практически невозможно прочитать. Да, как и сложные макросы в Си. Но лучше от этого шаблоны не становятся.
>>1853195 Что-то я орнул. Далеко не всегда. Если так идти выше по абстракции - зачем вообще кодить? Устраивайся менеджером и колошмать мозги подчиненным разработчиком: у них-то будет все лучше отлажено, чем у тебя.
>>1853298 Да все оно читается замечательно. А если программа большая и сложная так вообще намного лучше чем 500 функций под каждый принимаемый тип с именем этого типа в имени. МайКласс1sumМайКласс2()
А вот в маленьких программах где все прибито гвоздями и точно известно что и куда ты передаешь это действительно усложняет чтение.
>>1853638 Хранить глобально ничего никуда не передавать. Привет эмбеддед. >>1853640 И толку с таких крестов? Выше писали С с классами это не кресты.
>>1853335 Затем, что чем выше по абстракции, тем сложнее, то есть обладающий большим набором признаков и свойств результат. А чем этот набор больше, тем выше шанс, что он уникален и меньше тебя удовлетворяет. Ты же на машинном коде все не пишешь?
>>1853672 >Затем, что чем выше по абстракции, тем сложнее, то есть обладающий большим набором признаков и свойств результат. А чем этот набор больше, тем выше шанс, что он уникален и меньше тебя удовлетворяет. Охуеть, кто-то ещё кроме меня с интеллектом итт
>>1853662 > И толку с таких крестов? Выше писали С с классами это не кресты. У меня друг работал в геймдеве, писали игры для телефонов на крестах. И во всех проектах по дефолту прям были выключены исключения и rtti. Использовалась своя stl. Так что - такие кресты нужны. То что ты юзекейса не нашел - не означает что другие не найдут.
>>1853954 >Хотел сказать — посмотреть, какая помойка. Просто ты никогда не видел такого и возбудился. Но при этом то же самое на С++ выглядело бы красивше.
>>1854027 >Просто ты никогда не видел такого и возбудился. Видел конечно, но обычно мимо проходил, а тут вникать пришлось.
>Но при этом то же самое на С++ выглядело бы красивше. Об этом и говорю. Но так-то и на С было бы красивше чем то, что есть, если бы писали не так монолитно КАК ДАУНЫ БЛЯДЬ.
>>1854050 Код пишет человек, а не язык. Чем больше свободы в языке, тем более уебищный код можно написать. но это если программист рукожоп, а если программист грамотен, то и код будет тем лучше, чем больше у него возможностей.
Говоря просто, крутой язык (си) отражает способности программитста. Какой ты - такой твой код. Свобода означает безграничные возможности, но в то же время накладывает абсолютную ответственность. За свои действия отвечаешь только ты, полностью, никаких нянек вроде языка с анальными ограничениями и принуждениями тут нет, так что свои косяки свалить не на кого и за тебя красивый код никто не напишет и не направит "как надо". На си пишут только настоящие программисты, которые сами за себя отвечают и сами знают как им надо, а не ищут нянек, которые помогут и направят тупое дитятко на "правильный путь".
народ, вы тут по операционкам шарите скажите, я вот себе поставил линукс и проебался: не работают дрова вай фая и нет возможности подрубить кабель начал вручную скачивать на одном компе дрова и их зависимости всякие, но в итоге ебусь уже день с тем, что одно трубует другое, а оно еще другое и еще и еще - короче пиздец вопрос по теме: одна из вот этих нужны хуевин - gcc, но у него вереница блять зависимостей где можно найти архив с уже всеми укомплектованными .deb файлами?
Товарищи сишники, объясните пожалуйста несколько моментов в этом коде. Он сортирует массив указателей на строки. Почему в строке 7 мы приводим полученные войдовые указатели к типу "указатель на указатель на char", а потом разыменовываем? Почему не просто приводим к указателю на char? Также непонятна строка 14 ну и следовательно 15. Почему в качестве размера массива мы передаем именно такую константу?
>>1854310 АААА МОИ ГЛАЗААА Ну очевидно же - что-то делаешь не так. Может где-то не используешь нужную константу с указанием типа, или где-то в коде не то написано.
>>1854435 > Почему в строке 7 мы приводим полученные войдовые указатели к типу "указатель на указатель на char", а потом разыменовываем? Потому что qsort передает в компаратор указатели на элементы массива. Выходит в функции будут char ×× переданы, но реальный тип void ×, его надо привести к char ×× чтобы после разыменования указателя был тип char × который требуется функции strcmp. > Почему не просто приводим к указателю на char? А ещё разыменовать void × нельзя, так как неизвестен размер типа void. > Также непонятна строка 14 ну и следовательно 15. Почему в качестве размера массива мы передаем именно такую константу? sizeof возвращает размер типа. `sizeof a` вернёт размер в байтах всего массива(20 байт или 40 байт), sizeof (char ×) вернёт 4-8 байт(зависит от размера указателя).
>>1854483 > очевидно, но я не понимаю в чем проблема. Вот я тоже не понимаю, не вижу потому что код запутанный, полон неявных приведений int к float, перемножения и деления float на int. Плюс ко всему код плохо структурирован и его читать проблематично. В цикле у тебя вообще делится целое число 1 на целочисленную переменную i, если i не ноль(а оно не ноль судя по коду), то результат такой операции всегда 0 будет. И так далее. Просто запутанный и проблемный код. > И почему глаза болят? Код структурирован без какой-либо на то логики и формальных правил.
>>1854584 Таки да. Есть вариант, с `i == 1`. >>1854583 Красиво и четко. Эпсилон считать можно и не через pow. Расписать формулу для члена ряда нормально. Записать ее с использованием float литералов, и функций явно принимающих float(а может и double тебе нужен). Структурировать код надо так, чтобы читать было проще, а не выглядел он как ебучая картина Пикассо. По мере того как начало правильно считать и работать - вносить все ифы и прочее с ограничениями. >>1854589 Кажется ты читаешь мои мысли, ахаха.
>>1854310 вангую у тебя z всегда больше e и всё время растёт, поэтому цикл никогда не завершается тебе надо не z с e сравнивать, а разницу между новым z и и предыдущим
State s = HUI; bool isFinished = false; while(!isFinished){ switch(s){ case HUI: ... case MOCHA: ... break; case PIDOR: ... break; case BLYADINA: ... s = PIDOR; break; default:
>>1854936 >Даже не смешно. Ты попробуй реальный сложный автомат запилить.
То же самое, только
State s = HUI; bool isFinished = false; while(!isFinished){ switch(s){ case HUI: s = processHui(); break; case MOCHA: s = processMocha(); break; case PIDOR: s = processPidor(); break; case BLYADINA: s = processBlyadina(); break; default: printf("DA TY OHUEL SUKA"); isFinished = true; } }
>>1854228 >где можно найти архив с уже всеми укомплектованными .deb файлами? Какой линукс ты себе поставил? В убунте apt тебе автоматически все зависимости вытянет, как и любой пакетный менеджер.
>>1854818 Которая принимает сколько аргументов? а сколько ты передаёшь? >Под шиндошс с ней норм. Но зачем? >>1854910 >Отладочные принтфы запретили? Пиздец деграданты. >>1855450 >Нахуй нужно, линукс даже на кофеварках. Ну удачи, лол, особенно посмотрю на тебя в ЦОС с линуксом. ты просто не понимаешь в чём разница между микроконтроллером и микропроцессором и области применения >>1855538 >все подобные штуки будут писаться на си под rtos. Ртос это и есть линукс(в 80% случаев) , пилится всё на бареметал. >>1855832 Чтоб в фейсбук зайти. А если серьёзно - проще поставить МК чем ебаться с логикой на транзисторах >>1855841 классика маркетологов, а иван ерохин производит готовый продукт где ничего не надо качать и управлть с телефона, а где есть 4 кнопки, никаких головняков.
>>1855910 > последняя строка Два кофе этому господину.
Есть, короче, кофе машины. На них 2-3 кнопки - эспрессо, средний и большой американо. ВИСЬО. Хочешь капучино? Сбоку есть капучинатор: трубка мокается в стакан с молоком, нажимается еще одна кнопка, выплевывается теплая молочная пена.
>>1855958 Ок, используй. >чтобы кто-то юзающий функции не выстрелил себе в ногу Чтоб не выстрелить себе в ногу, надо не стрелять себе в ногу. Заебали уже прохрамисты которые пишут так что оно может "выстрелить себе в ногу", пиши так чтоб оно не стреляло себе в ногу. а выстрелить себе всё равно проблем не составит
>особенно для бедного студента который лабу пишет Вот как раз студентики то пускай себе ногу и отстреливают, у них и время на это есть и на проде не упадет, того гляди поотстреливают себе ноги пока молоды так потом как вырастут этого делать не будут.
>>1856012 > Ок, используй. У меня нет винды. Я лишь поясняю что это за функции у МС имеются в наличии. > >чтобы кто-то юзающий функции не выстрелил себе в ногу > Чтоб не выстрелить себе в ногу, надо не стрелять себе в ногу. "Если ты бездомный, просто купи дом" > Заебали уже прохрамисты которые пишут так что оно может "выстрелить себе в ногу", пиши так чтоб оно не стреляло себе в ногу. "Да вот возьми и купи дом. Нет денег? Заработай!" > а выстрелить себе всё равно проблем не составит "А быть бездомным может каждый, на это много ума не надо" Примерно так твоя аргументация выглядит
> >особенно для бедного студента который лабу пишет > Вот как раз студентики то пускай себе ногу и отстреливают, у них и время на это есть и на проде не упадет, того гляди поотстреливают себе ноги пока молоды так потом как вырастут этого делать не будут. Дык они и отстреливают. Попадают потом на работу/стажировку, и там уже в твоих проектах стреляют в ногу. Пусть на примере этих функций узнают об возможностях пострелять в ноги, и может поинтересуются как эти проблемы обошли.
Я вот прочитал это Brian Kernighan, Dennis Ritchie "The C Programming Language" Но не нашёл там про оператор ",". Впервые увидел его применение в декомпилированном коде от IDA
>>1856038 Один из лучших подходов сишечки это парадигма "оно то есть но если оно плохое то мы его не используем" Вот это из разряда функций которые использовать просто не надо. Так же как и цикл "Ду вайл"(кроме определенных случаев где он действительно уместен)
А при чем тут бездомные. Ты не можешь писать код предварительно подумав что и где он делает? Или тебе надо чтоб тебя ограничивали и говорили что так нельзя? Так и появляются говносишники которые перешли из какой-то джавы с тотальным анальным контролем которые пишут говно из-за того что коданалищатор их не стукает по ручкам.
Как-то хреново отстреливают если не помогает. Я как-то во время обучения настрелял достаточно чтоб трижды подумать над каждой строчкой
>>1856237 > Один из лучших подходов сишечки это парадигма "оно то есть но если оно плохое то мы его не используем" Тогда почему не удаляют? > Вот это из разряда функций которые использовать просто не надо. И почему же? _s ничем тебя особо не обязывает, а при наличии ошибок в коде - тебе может подсказать что ты сделал не так сам компилятор или crt выведет что-то. > Так же как и цикл "Ду вайл"(кроме определенных случаев где он действительно уместен) Ясно, у тебя все нинужно, если ты этому не можешь найти применение.
> А при чем тут бездомные. Ты не можешь писать код предварительно подумав что и где он делает? Или тебе надо чтоб тебя ограничивали и говорили что так нельзя? Аргументация у тебя уровня дебила. Я так понимаю, ты с большими проектами на Си не работал и большой командой? Все писал своими потными ручками, чисто свой код и из-за этого у тебя выработалась мания величия? Когда половина кода написана не тобой, и он весьма большой по объему - анализаторы вполне могут сократить время разработки приложения, банально предупредив о какой-то возможности наколоться. Нет, конечно, можно пойти в код, глянуть что за таинственная функция написанная каким-то давно уволившимся сотрудником, изучить как она работает, как тянет ворох других ваших функций, потратить денёк на дебаг, а можно просто увидеть выхлоп анализатора или warning компилятора и исправить сходу свой код на правильный вариант. > Так и появляются говносишники которые перешли из какой-то джавы с тотальным анальным контролем которые пишут говно из-за того что коданалищатор их не стукает по ручкам. Смешно, но знаю тонну джавистов которые сбежали от С/С++(причем работали в этой области от 10 лет) просто потому что их достало ебаться с памятью > Я как-то во время обучения настрелял достаточно чтоб трижды подумать над каждой строчкой И наверное пишешь 10 строчек в месяц, мня о том какой ты ниибацца охуенный погромист.
>>1856313 >Тогда почему не удаляют? По тому что кто-то это уже использовал. >И почему же? А делать "как все" нельзя? Надо изебнуться? чего тебе не хватает в обычном сканф? >_s ничем тебя особо не обязывает Кроме того что это это виндовая функция > а при наличии ошибок в коде - тебе может подсказать что ты сделал не так ???? что там она подскажет?? >если ты этому не можешь найти применение.
Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен)
> ты с большими проектами на Си не работал и большой командой? Работал, не могу сказать что уж совсем большими и что уж совсем большой командой(не совсем понимаю как в С можно работать большой командой и главное почему тогда не перейти на язык который для этого больше подходит)
А ты работал?
>Когда половина кода написана не тобой, и он весьма большой по объему Да у меня фреймворк с открытым говнокодом я замечательно знаю что это такое.
>анализаторы вполне могут сократить время разработки приложения Да именно так, статанализаторы это наше всё, но не для студента, студент должен работать САМ и СТРАДАТЬ, а статанализаторы пускай будут когда он поймёт что он делает. просто читаю ОПа(это ты??) с тем как он в 3-х строках обосрался и вместо того чтоб разобраться и отдебажить пришел ныть на двач со своей "безопасной функцией"
>Смешно, но знаю тонну джавистов которые сбежали от С/С++ Ок, я рад за них, при чём ту это?
>И наверное пишешь 10 строчек в месяц Я пишу коммерческий код за который платят деньги. А ты лабораторки в вузе?
>>1856573 > >Тогда почему не удаляют? > По тому что кто-то это уже использовал. Я б удалил с новых версий языка, если их никто не использует из-за того, что это дурной тон. >По тому АХАХАХАХАХХАХАХА Кажется препроцессор писал за тебя. > >И почему же? > А делать "как все" нельзя? Надо изебнуться? чего тебе не хватает в обычном сканф? Защиты от разьеба стека, которую предоставляет _s версия. Замечу, scanf обычный в gcc/glibc это все тоже делает, но без суффикса, ms решили не ломать обратную совместимость. > >_s ничем тебя особо не обязывает > Кроме того что это это виндовая функция Говоришь как будто это что-то плохое. О ГОСПОДИ, А ЕСТЬ ЖЕ ТОННА СИСТЕМ ГДЕ НЕТУ LIBC И СТАНДАРТИЗИРОВАННЫХ ФУНКЦИЙ, НА НИХ ПИСАТЬ НЕЛЬЗЯ, НЕ КАНОН, ВЕДЬ ТАМ НЕТУ ТОГО К ЧЕМУ ИМЕННО ДОЛБОЕБ ИЗ СИ ТРЕДА НЕ ПРИВЫК, КАКОЙ УЖАС > > а при наличии ошибок в коде - тебе может подсказать что ты сделал не так > ???? что там она подскажет?? Поюзай ASan/TSan, дядь, ты устарел. > >если ты этому не можешь найти применение. > Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен) Беру и пишу небольшие циклы do while где удобно. Чет не выгнали ещё за столько лет. Проблемы? > > ты с большими проектами на Си не работал и большой командой? > Работал, не могу сказать что уж совсем большими и что уж совсем большой командой(не совсем понимаю как в С можно работать большой командой и главное почему тогда не перейти на язык который для этого больше подходит) Ты хочешь сказать Си не подходит для большой разработки? Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции. > А ты работал? Да. Вполне норм работаю в США. > >Когда половина кода написана не тобой, и он весьма большой по объему > Да у меня фреймворк с открытым говнокодом я замечательно знаю что это такое. Видать ты и поехал крышей после такого дебага. > >анализаторы вполне могут сократить время разработки приложения > Да именно так, статанализаторы это наше всё, но не для студента, студент должен работать САМ и СТРАДАТЬ, а статанализаторы пускай будут когда он поймёт что он делает. "Иисус сказал что надо страдать и мы страдаем все, не только программисты, но особенно программисты, возомнившие себя выше других." Не мог не вставить. Зачем страдать, когда можно объяснить и рассказать где про это прочитать? Или ты один из тех программистов, возомнивший себя выше других, который находит в страдании обучение? Я вон учился в универе и не страдал, вполне неплохо обучился, прод не обваливаю, код крутится@лавеха мутится. > просто читаю ОПа(это ты??) с тем как он в 3-х строках обосрался и вместо того чтоб разобраться и отдебажить пришел ныть на двач со своей "безопасной функцией" Ни у кого насчёт нее претензий не было, кроме тебя. > >Смешно, но знаю тонну джавистов которые сбежали от С/С++ > Ок, я рад за них, при чём ту это? К тому что от таких говнохранителей как ты народ и перестает пользоваться байтоебскими языками. > >И наверное пишешь 10 строчек в месяц > Я пишу коммерческий код за который платят деньги. Тоже. > А ты лабораторки в вузе? Смешно.
>>1856798 >Я б удалил с новых версий языка, Охуенно, чтоб обновился и твой легаси проект упал, заебись блять и хранить 10 компехляторов. >Говоришь как будто это что-то плохое. Использовать что-то особое когда есть обычное с таким же функционалом. >Ты хочешь сказать Си не подходит для большой разработки? >Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции. Да, я вижу когда при разростании проекта наступает момент когда "на плюсах было бы проще" >Зачем страдать, когда можно объяснить и рассказать где про это прочитать? За тем что когда ты учишься - это замечательное время обучиться навыку решения говнопроблем и поиска ошибок САМОСТОЯТЕЛЬНО, если ты его обрёл без страданий - честь тебе и хвала, как видешь, вопрашающий не обрёл и вместо того чтоб разобраться и немножно пострадать выбрал "простой путь" а не пройдя хоть пару раз по сложному он в дальнейшем не сможет по нему сам пройтиу него просто банально не будет на это времени >Ни у кого насчёт нее претензий не было, кроме тебя. эээ и что? ну у меня есть. >К тому что от таких говнохранителей Говнохранителей чего? того что не надо в "свой особый путь" Если я тебе скажу что я не использую функцию Ссканa ты мне тоже скажешь что я не прав?
>>1856573 >Ок, давай покажи применения ду-вайл за которое тебя не выпрут с работы за мозгоёбный кодстайл (вариант инициализации не предлагать, там он действительно лаконичен)
Что за ёбань я читаю вообще. Может вам и goio удалить хочется?
>>1856237 >Так же как и цикл "Ду вайл"(кроме определенных случаев где он действительно уместен)
Мой любимое использование do { / code here / } while(0); для избежания использования большой вложенности операторов if
Ибо: if(condition) break; между которыми помещается код. В результате, после небольшой привычки, код читается даже легче и выглядит пристойнее, чем куча вложенных if()
>>1856573 > Do while Любой случай, где заранее известно, что условие истина, но стоимость вычисления условия нетривиальна. Или же случай, где условие не определено до завершения итерации. Примеров море, но мне лень копировать.
>>1856863 > do { / code here / } while(0); Это именно тот случай, я когда встретил это решение то просто охуел от лаконичности. >>1857022 >Примеров море, но мне лень копировать. Они все замещаются форами или обычным вайлом. А читать код где кто-то решил показать всё на что он способен и как познал всё до чего можно только дотянуться это пиздец. >>1857025 пик
>>1856817 > >Я б удалил с новых версий языка, > Охуенно, чтоб обновился и твой легаси проект упал, заебись блять и хранить 10 компехляторов. Порой бывает старые проекты не собираются на новых компиляторах. Бывает. Может ты не сталкивался, а я сталкивался. > >Говоришь как будто это что-то плохое. > Использовать что-то особое когда есть обычное с таким же функционалом. Тебя ничего не обязывает юзать что одно, что другое. Если платформа что-то предлагает получше, почему не заиспользовать? Я не вижу в этом ничего плохого. > >Ты хочешь сказать Си не подходит для большой разработки? > >Ты точной опытный дядька? Я имею большие сомнения насчёт твоей компетенции. > Да, я вижу когда при разростании проекта наступает момент когда "на плюсах было бы проще" Я с таким сталкивался только из-за либ которые есть на С++, а на Си - только хуярить самому wrapper. > >Зачем страдать, когда можно объяснить и рассказать где про это прочитать? > За тем что когда ты учишься - это замечательное время обучиться навыку решения говнопроблем и поиска ошибок САМОСТОЯТЕЛЬНО, если ты его обрёл без страданий - честь тебе и хвала, как видешь, вопрашающий не обрёл и вместо того чтоб разобраться и немножно пострадать выбрал "простой путь" а не пройдя хоть пару раз по сложному он в дальнейшем не сможет по нему сам пройтиу него просто банально не будет на это времени Ну мы ему ответили. Он не станет программистом, вероятнее всего. Или хорошим программистом не станет. Меня это устраивает, меньше конкуренции в будущем. > >Ни у кого насчёт нее претензий не было, кроме тебя. > эээ и что? ну у меня есть. А я у меня нет. > >К тому что от таких говнохранителей > Говнохранителей чего? того что не надо в "свой особый путь" Каждый имеет право на свой путь в программировании, выбрать самому как учиться, выбрать какие функции юзать. > Если я тебе скажу что я не использую функцию Ссканa ты мне тоже скажешь что я не прав? Да и я их не использую. Но если будут юзать(даже для чтения ебаного stdin) - ну и норм, это ж не я написал, главное чтоб работало правильно.
>>1857202 >Они все замещаются форами или обычным вайлом. Да-да, конкструкция с бесконечным циклом и if-break-ами существенно лучше, конечно читается. Аллоэ, за это тред кто-то конкретику про do-while принесёт, или лишь бы кококо?
Пока не проверял, но почти что 100% на этом базисе можно написать любую программу.
Нужно вычитание? Используй вместо него NEG и ADD. Нужно сдвинуть регистр на один бит влево - используй 31 сдвиг через перенос вправо. Нужен нециклический сдвиг? Сделай перед сдвигом AND по маске. И т.д. по аналогии.
При этом программу будет жутко неэффективная, но мы же речь ведём о минимальном базисе, а не об эффективности.
>>1857476 > >Тебя ничего не обязывает юзать что одно, что другое. > <Но давайте выпилим цикл с постусловием, он меня напрягает, похуй на совместимость. > Чот биполярочка Явно вижу ты не следишь за обсуждением или толком его не читал, потому что отвечаешь на пост человека, который за наличие do-while в си, который срется с противником оного и чет заливаешь за биполярочку. Сессию как сдавать будешь, если ты читать не в состоянии?
>>1857625 Я знаю что ты шутишь, но я не привык сдаваться. Тебе нужен процессор с одной инструкцией MOV? Это возможно. Ты можешь зарезервировать несколько физических адресов и сделать процессор с одной инструкцией. Например, по адресу 0x10000 находится ячейка, при записи в которую процессор переходит на адрес, записанный в неё. Вот тебе уже и JMP родился. по адресу 0x10008 запписываешь первый операнд. По адресу 0x10010 запписываешь второй операнд. По адресу 0x10018 ты читаешь сумму записанных чисел По адресу 0x10020 ты читаешь разность записанных чисел. И так далее.
Вот видишь, оказывается процессор с одной инструкцией возможен. Реализацию условных переходоы мне придумывать лениво, но полагаю что и эта задача решаема.
>>1857639 Вроде как тема эта уже изучена как URISC процессоры. Было бы прикольно чтобы кто-то написал под сие дело компилятор Си, а то дальше ассемблеров дело не доходило.
>>1857637 Извини, в сортах анона не разбираюсь. Постер отвечает на фразу о невозможности компилить старый код новым комилятором после гипоететической правки синтаксиса чем? «Ну и что, и так сейчас бывает».
>>1858024 Отловить SIGSEGV можно. Вывод стэктрейса можно сделать через backtrace() на линуксах, или чем-то другим если система другая. Потом можно названия функций и смещения конвертнуть через утилиту addr2line в названия файлов и номера строк, если нужно.
Господа СИшники. Реквестирую помощи. Почему так? Почему выводится какая-то хуйня? По долгу учебы надо писать на Си, на питоне все замечательно работает, на Си же выводится неведомая хуйня. Сложность задания не играет роли. Выводится непонятное число, хз откуда, как исправить - тоже. В гугле инфы по этому вопросу нет, одногруппники сами охуевают. Без вас не обойтись.
>>1858333 Именно такая фигня с массивами. Неадекватное поведение даже не только в этом примере, а в других. Вывод на экран тоже, может вывести первые 2-3 элемента ОК, потом какую-то хуйню. Или 1 элемент потом опять невнятное число. К сожалению, писать на других языках запрещено, с радостью бы писал, приходится работать с этим языком.
Например здесь, просто скриншот, в онлайн компиляторе вообще другой вывод, отличный от моего. Почему так он себя ведет и как этого избежать? А да, & пробовал ставить и убирать, вывод не меняется. Не в нем дело.
>>1858343 Не дает. Ошибка компиляции. Пробовал >>1858345 и что? Вывожу 2 значения. После джавы и питона не вижу ничего плохого. Тип один и тот же. & убирал , не помогает, так же пробовал %d%d , тоже не помогает
>>1858333 А что тут объяснять? Ты создал массив из 0 элементов. Навсегда. А потом обращаешься по индексу за его пределами. list = tmp никакой памяти не выделяет, новых элементов не создает.
>>1858351 Долбаеб ебаный тебе уже указали на твои ошибки ты продолжаешь высирать полотны малолетнего бреда int[] пустой чанк памяти которым ты отстреливаешь себе ноги printf %d на pointer возвращает адрес ссылки
>>1858361 Размер таких массивом должен быть известен на этапе компиляции. В gcc есть расширение, позволяющее писать arr[n], но это не стандарт. Тебе в твоём случае надо заалоцировать через маллок массив и освободить эту память в конце
>>1858365 Ну ты прав. Я долбоеб , правда не малолетний. И ошибки указали, я их исправил и все заработало, я на Си никогда не писал до этого. >>1858370 спасибо
>>1858361 >int list[] = {0}; Компилятор сопоставит общее количество элементов в "{}" и засунит это в [] Тут у тебя хуйня эквивалентная list[1] = {0} Для динамики маллокейти
Такой вопрос, пишу учебный консолечный квест. Нужно чтоб происходила ротация определенных событий в мире, с долей рандома. Есть ли вариант вариант запихнуть реалтайм генератор эвентов в зацикленную функцию, пока игрок делает ходы. Хз, возможно ли это, но только си не передаст управление обратно игроку пока цикл бесконечный,а нужно чтобы он работал независимо от него. Может и хуйню горожу, но мсье хочет ебли. Или покатит только вызов функции с рандоматором?
>>1859108 Можно сделать новый поток и там генерить. Можно вообще ничего не делать, а смотреть когда игрок сделал ход, сколько времени прошло, и в зависимости от этого насувать N событий.
>>1859108 У тебя чтоль общий цикл как блокирующие функции написан? Если нет - в него в начало и пихай, там проверяй время (не на каждый же оборот цикла что-то должно происходить)
Если у тебя там уже есть потоки - создай ещё один и в нём делай что тебе надо с вейкап периодом когда тебе надо.
>Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели. Кто читал? Сколько полезного узнали? Охочусь сейчас за всей инфой по хипу, немножечко не понимаю, надеюсь эта книжка мне поможет. К слову, не могу понять - Если инкрементировать сам указатель до того как он станет нулевым т.е до конца, он останется на начальном или конечном адресе если делать дереференс? Я проверил на принте, что он доходит до нуля, только не могу понять остается ли он там.
Еще можете подсказать как можно создать массив чаров только после того как пользователь введёт текст? Например сейчас мучаюсь с прогой в которой есть функция которая принимает текст и сплитит все найденные слова в массив из массивов чара. Если с этим нет проблем, то со строкой неизвестно сколько пользователь может ввести. Как с этим справляются опытные программеры?
>>1860198 Выделяешь изначально сколько-то памяти и считываешь пока не встретится символ перевода строки. Если память кончилась раньше чем встретил символ выделяешь ещё в два раза больше и продолжаешь.
Пиздец, почему линукс такой уебищный, и почему на нем все ещё кто-то сидит? Вот щас не пользовался ноутом где стоит чисто убунта несколько дней, захожу - отвалился вайфай. Просто так, сам собой) и вэлкам многочасовой пердолинг в консольке и чтение форумов красноглазиков. Почему с виндой я уверен что я сегодня запущу компьютер, и у меня все будет также как и вчера, а с линуксом я даже не уверен что у меня он вообще запустится нахуй?
>>1860567 Само собой в линуксе может только хуй твой отвалиться, быдло невежественное. Линукс нихуя без твоего ведома не сделает, даже убунта. Ты сам нахуевертил где-то с ним, вот и сидишь без вайфая.
>>1860567 Раз на раз не приходится. Стабильность дров та ещё шняга, особенно если сетевуха realtek, китайцы не стараются делать норм драйвера, или отвал, или отсутствие дров обеспечено. Более или менее норм на интеловсих wifi, там драйвер являет собой лаунчер огромного блоба, который и под виндой юзается. Поддвачну этого >>1860643, имею ноут на Windows 10. Он уже давно не включается. Он находится при запуске в состоянии попытки поставить апдейт, апдейт отваливается непонятно почему, работается и винда опять ставит апдейт. Мне в принципе похуй, я пекабоярин. Но винда походу там умерла окончательно. Мне кажется нетестируемые CI/CD апдейты в ОС скоро сыграют в ещё более злую шутку(злоумышленники троянца отправят по всем компам в качестве апдейта). Таким может отличиться или винда, или та же убунта.
>>1860603 Во как. >>1860320 Понятно. >>1860301 Уже проверил. Указатель после инкремента до нулевого значения остается на том же адресе. Нулевое значение идет после последнего элемента в указателе.
>>1860733 >Уже проверил. Погоду на Марсе если только. После дереференса нулевого указателя у тебя UB. Сегодня твой компилятор и твоя ОС привели к такому результату, на другом железе у другого человека будет другое.
>>1860610 ты че слепой бля? Я же написал: не включал ноутбук несколько дней в последний запуск вайфай работает, щас нет. Да и это офк не первый раз проблемы с еблинуксом. После установки (офиц. версию с флешки, на чистый комп, без винды) у меня просто не регулировалась яркость экрана и не работала добрая половина клавиш Fn не работала. Ахуенная ОС. Только установил - сразу начинается пердолинг.
>>1860854 Кто ебёт, что ты несколько дней с этим выключенным ноутом делал, дебил? Может ты им в футбол играл, может уронил по пьяни. Ты нихуя не понимаешь в устройстве линукс, но уже имеешь наглость свой вонючий рот открывать. Программирование не для тебя, скройся.
>>1860567 > Почему с виндой я уверен что я сегодня запущу компьютер, и у меня все будет также как и вчера, а с линуксом я даже не уверен что у меня он вообще запустится нахуй? Не будет. Даже с макосью. Хочешь стабильность - выключай автоапдейты и управляй пакетами сам, как делают все нормальные конторы. Или ставь hardenned gentoo centos > захожу - отвалился вайфай. Просто так, сам собой) Если ты починил, то ты знаешь почему он отвалился и как сделать чтобы он не отваливался. Если не знаешь, то ты ещё не починил.
Знаю, что вопрос не совсем тематический. Но все-таки тут происходит низкоуровневое дрочево, поэтому, надеюсь, кто-то может мне пояснить за следующую фигню. Судя по пик 2, uname -m система должна выдать мне cpu microarchitecture, в случае с i7 4800mq должно выводиться Haswell. Я же вижу i686. Какого хуя? Я же не капчую на проце из девяностых. uname -p должно выдать ISA. Опять же, какого хуя я вижу тут i686? Даже если учитывать, что проц запускается в Legacy mode (32 бит x86 архитектура), то разве самый последний ISA в случае x86 это i686? Есть же i786 (первые pentium 4 были 32-бит x86). С последней строкой вопросов нет -- это просто минимальное требуемое ISA для работы дистрибутива. Причем странно, что я вижу идентичный вывод в первой строке (пик 1) даже на amd ryzen. У него-то cpu microarchitecture тоже не может быть i686.
На связи снова дебик-кун. Жопная боль относительно рекурсии: https://pastebin.com/XfFzSv56 Код компилится, но после запуска неизбежно появляется сообщение об ошибке. Что делаю не так, хотя вроде следую той же логики в своем коде, и гугление дает похожие примеры.
>>1861385 Почему она должна заново вызваться? Для справки, рекурсии в учебнике посвящено пол темы, и за зацикливание ни слова, только весьма странное описание ее работы на пике. Мне вот допустим нужно чтоб в вызове себя она просто перемножала любое число и все
>>1861429 >Я думаю что они просто тиснули что-то типа наименьшего общего элемента. Таковым является i386, и дистр действительно собран под эту ISA -- на i386, i486, i586, i686 и i786 заведется. >Может быть у тебя система и не использует инструкции 786, кстати. Вот я и не могу понять, а почему? Ведь 786 был 32-бит x86 несколько первых поколений пня четвертого. То есть почему бы в Legacy Mode процу не исполнять именно ISA i786? Почем проц работает в i686?
>>1861422 Но в lscpu белым по черному написано Architecture: i686. То есть проц работает в режиме ISA i686. Почему? Ведь последним ISA для 32-бит x86 архитектуры является i786
>>1861447 i686 - это под какую версию архитектуры x86 собрали бинари, команды процессора новее чем описанные в мануале pentium pro не должны использоваться. На этом все.
>>1861449 Хорошо, то есть ISA процессора в linux узнать невозможно? Ведь мы видим только i686 -- какая архитектура ISA минимально поддерживается ядром системы. И тогда к чему относится вывод команды uname -i? Там вообще i386, это что?
>>1861459 Точную ISA? Это зависит от архитектуры, конечно же. В принципе если в выхлопе увидел намек на x86, дальше можно чекать только поле Flags из файла /proc/cpuinfo, там в принципе описаны все фичи/инструкции которые поддерживает процессор. Ну или юзать cpuid. Допустим архитектура i686, но в flags светится команда popcnt, на оригинальном i686 ее не было, а на твоём процессоре есть, ты можешь написать код который её дёргает, система не кинет тебе SIGILL, хоть и система рассчитана на работу на пентиум про.
>>1861468 Я имею в виду, что то, что мы получаем с помощью uname -m -- это информация о том, для какой архитектуры было скомпилировано ядро. В данном случае, для i686. uname -p (по идее) должно выдавать ISA проца. Так как система у нас 32 битка и скомпилена для i686, то проц должен работать, как минимум, в режиме i686 (что он и делает), однако, почему сам проц не работает в режиме i786 (который совместим с i686) который является самым последним и свежим набором команд 32-бит x86 архитектуры? Я, вообще, правильно понимаю логику или где-то проебался? Я просто уже десяток топиков прочел, везде разные ответы. Также я все еще не понимаю, что выводит uname -i (в данном случае i386)
>>1861509 Ты логику не понял. Ядро хоть и собранно под i686, можешь на нем гонять инструкции от более новых версий isa если они доступны на данном процессоре. Собранное ядро под i686 не заставляет твой процессор гонять только инструкции для i686, не ограничивает в рамках одной isa, а на новые инструкции проц не будет кидать исключения с неправильной инструкцией. Исключения наверное lm, который уже x86_64. Такая тема на каком-то arm или powerpc вероятнее всего не сработает, считай это фичей х86
>>1852710 (OP) Короч аноны. Говнокод лонгрид. Мучает меня вопрос...
Пишу под встраиваемки. Часто нужно свапать параметры при изменении в разные места. Например в ПЗУ и на дисплей. Или только на дисплей, а другое на ПЗУ, треть только на ПЗУ. Четвертое имеет размер не в байт а в 4. И тд и тп.
Причем ок, когда подобной хуйни 5-6, 10, 20.. Можно обойтись пару тройкой энумов и нормально это распихивать и по адресам дисплея и по адресам ПЗУ.
А вот че делать когда их 100 и выше? В один момент, у меня было 14 C файлов с const массивами, создававшими таблицу: энум переменной - адрес ПЗУ, адрес дисплея, размер, флаги че с этим делать. Причем ясен хуй файлы эти хранились отдельно от своих модулей, вместе, т.к. адреса расписывать руками заебнее, чем искать где переменные этого модуля.
Меня в один прекрасный момент это заебало, я решил - еепромы нынче дешевые пиздец и я могу просто ставить размером с ОЗУ, затеняя адреса на еепром.
И наговнокодил вот такую хуйню: https://ideone.com/vDFqUt Что бы внутри непосредственно модуля, делать вот так: https://ideone.com/t3d5Hn Сохранение переменной выглядит теперь вот так: VAR_Save(var_props[VAR_ENUM], new_value, NULL); VAR_Save или Load собственно читает инфу о переменной по адресу в ПЗУ и выполняет действия требуемые в описании. Например добавляет адрес и размер в очередь на отправку значений на дисплей или в ПЗУ.
Главная особенность этой хуйни, она почти не жрет ОЗУ, жрет столько сколько занимает непосредственно переменная. При этом обеспечивает моментальную реакцию на изменение. Это все заебись, только все равно не особо удобно. Если требуется внести изменения в таблицу - милости прошу перепахивать всю хуйню. Далее, милости прошу соснуть хуйца, если забыл где-то сделать VAR_Save, а просто напрямую записал.
Какие варианты есть еще? Прям отдельная аля база данных? Но это прям совсем хуйня, т.к.: - жрет охуеть ОЗУ, на 1 байт будет оверхед из 5-6 байт. Учитывая что большинство переменных такие считай 5х требуемый размер. - еще более медленное говно, пусть и не сильно. - требуется либо динамическая регистрация, что еще сильнее разжирнит размер в ОЗУ, один хуй потребует таблиц адресов (ну или при каждых изменениях - сохраненные настройки ВСЕ, т.к. адреса поехали). - снова городить таблицы внутри, что возвращает меня к первоначальной проблеме. - один хуй останутся функции чтения\записи
>>1862190 Операторы такие, биты в регистрах сдвигают. >> и << Операторы Было в регистре число 5 = 101b Сдвинул влево на 2 позиции, стало число 10100b = 20, сдвиг влево по сути умножение на 2(522). Сдвинул на 2 позиции опять же число 101b, вышло 1b = 1, сдвиг вправо по сути деление на 2 целочисленно((5/2)/2). Ещё есть сдвиги разные в процессорах, и сдвиги циклические. Всё это в инете почитаешь.
>>1862190 >Сап, поясните за битовые сдвиги. сдвиг на один бит влево равносилен умножению на 2 сдвиг на один бит вправо равносилен делению на 2 сдвиг на два бита - на 4 сдвиг на три бита - на 8 etc.
>>1862276 окей, то есть, каждый сдвиг на >> 1 будет умножать на число в два раза больше: 1>> 2 | 2 >> 4 |3 >> 8| 4>> 16 и т.п. И на сколько можно двигать позиций максимум 32 я так понимаю?? И еще вопрос один глупый вопрос, как переводить с двоичной допустим в 10-ричную. Можно ли при помощи сдвигов это реализовать? Препод нам ляпнул про сдвиги, но объяснять не стал, сказал что еще рано (ебать рано - почти все темы ебнули, а про сдвиги так и не объяснил)
Второй вопрос смешной. Внезапно, представление целочисленных регистров и переменных только в битах(и байтах). Считай что запись десятичного числа в переменную уже переводит его в биты. С битовыми сдвигами можно легко биты эти вывести.
>>1862571 > как переводить с двоичной допустим в 10-ричную.
А вот тут тебе уже без настоящего деленя не обойтись. Вообще такого понятия как перевод из одной системы исчисления в другую для компьютера не актуален. Если закрыть глаза на существующую в 8086 десятичную арифметику, которая давно никем не импользуется. Поодумай эту мысль.
А теперь о том, как вывести на уэкран число в десятичном виде.
Берёшь массив char элементом на... ну 10 хватит.
Делишь переводимое число на 10. К остатку прибавляешь ASCII код нуля и пишешь в последний элемент массива. Проверяешь частное - если не ноль, то повторяешь операции, и записываешь в предпоследний элемент массива, иначе в массиве ASCII коды цифр преобразуемогоо числа.
Смотри пример. Число 0xC. При делении на 10 остаток равен трём и частное равно единице. Три записываешь, единицу делишь снова на 10, получаешь один в остатке и ноль частное. Вот у получилист у тебя цифры 3 и 1. Но поскольку ты записываешь их в массив с конца, то будет 1 и 3, т.е. 13.
>>1862571 > как переводить с двоичной допустим в 10-ричную int number = 100500; char str[16]; sprintf(str, "%d", number); d тут значит decimal. Попробуй ещё %o, %x. octal, hexadecimal
>>1862945 окей, так. Мне в руки попала программа. Перевода с 10 в 16-ричную. Так там мужик объясняет, что в конце нужно добавлять 0xf для перевода в 16-ричную. объясните мне что да как, за сегодня только еще больше путаницы произошло в моем мозгу. Возможно я что-то не так понимаю
Какая разница между statements и operator? Всё переводится как оператор, но я гуглил и нашел какую-то тухлую тему с форума по с++ где напиасли несколько постов непонятных, где ничего конкретно не сказали, только что у statements нет перевода "операция" вообще
объясните вкратце, хуки легко детектятся какими-нибудь античит системами? можно ли со 100% гарантией только получать информацию от приложения (игры) и не получить бан, без попыток подмены адресов в его памяти? если что, я не читер и никакого преимущества над другими я не получаю в данном случае (игра вообще сингл, просто требует наличие аккаунта и подключение к сети). хочу сделать для себя небольшого хелпера, который структурировал бы инфу по моему алгоритму в отдельном процессе. хуки не писал ни разу
>>1863440 хз, я просто увидел топ моды и поставил цену на обум. я уже и забыл про это кольцо, еще немного и сдал бы вендору. не знаю ни один билд, кому бы такая солянка зашла даже за 30с. с другой стороны, уже конец лиги, мб месяца полтора назад на него еще и был бы спрос...
Решаю задачки на сайтах типа кодварса. Не могу разобраться со строками. Перестановка порядка слов к примеру, или перевернуть слово и потом переставить порядок. Или тот же малок для алокаций памяти для массива из указателей на строки. Короче голова болит, что делать? Может есть какие нибудь ресурсы или книжки где все разжуют, без решений.
>>1863607 path of exile сначала мне интересно было понять, как работает эта тулза https://github.com/SnosMe/awakened-poe-trade она каким-то образом определяет предмет, на который ты ткнул в gui самой игры вплоть до получения свойств предмета, и показывает его цену на игровом рынке. покопался я в исходниках и нашел какие-то намеки на использование хуков, но целиком сам процесс именно этого приложения понять не смог. при этом, за это приложение не банят и на офф форуме игры его обсуждают/советуют + стримеры им пользуются.
сейчас я хочу сделать что-то подобное, только чтобы получать информацию о текущих квестах в игре. это нужно для того, чтобы бегать сюжетку максимально быстро и не сворачивать игру на гайд - не тратить время на это. игра построена так, что можно делать параллельно задачи в игре, даже если игра еще сама не говорит о них, а чтобы делать такое без гайда, надо прокачать героев 100 наверное и тупо вызубрить этот монотонный процесс. т.е. суть моего помощника в том, чтобы в реальном времени транслировать, если не в сам процесс игры, то в процесс этого приложения информацию о следующем действии. для этого надо как-то обрабатывать состояния квестов в процессе игры и получать от них информацию.
>>1852710 (OP) Что и чему позволяет осуществять наличие файловых дескрипторов, если есть PID'ы + fork(), open(), exit() и т.д ? Никакие гуглы и книжки по-програмиздски человеческим языком пояснить не могут.
>>1863677 Из всего что ты перечислил, только open() имеет отношение к файловым дескрипторам. Собственно open() при открытии файла и возвращает этот дескриптор, с помощью которого ты осуществляешь операции с открытым файлом.
>>1863706 Куда возвращает? Родительскому процессу? А дальше что происходит, род. процесс этот дискриптор параметром в его (родительских) вызовах использует? Для чего?
>>1863716 Неправильные вопросы задаёшь. Это плохо. >Куда возвращает? Функция open() возвращает файлоый дескриптор или -1, если по какой-то причине не удалось открыть файл.
>Родительскому процессу? Тому процессу, который вызывает функцию open()
> А дальше что происходит, род. процесс этот дискриптор параметром в его (родительских) вызовах использует?
Дальше ты используешь этот дескрпитор в функциях write и read, f так же close()/
>Для чего? Чтобы писать в файл и читать из файла.
fork() это другое - это порождение нового процесса путём его клонирования. После него у тебя будет два одинаковых процесса и каждый из них будет иметь одинаковые открытые файлы.
exit() вообще не использует файлоые дескрипторы, а просто завершает программу. При этом ОС сама закроет все открытые файлы. Но лучше это делать явно.
>>1863726 Т.е процесс 1 вызывает open() для открытия файла 1, и если у вызова(?) этого не получается, то он возвращает процессу 1 дескриптор -1? А дальше при попытке вызвать read() или write() процессом 1 в них (read/write) передаётся уже полученный дескриптор -1 в качестве аргумента?
>>1863730 Если тебе функция open вернула -1, зачем дальше пытаться read/write? Выводишь сообщение об ошибке пользователю retry/abort либо завершаешь прогу.
>>1863732 В таком случае в какой раздел вирт. адресного диапозона процесса записывается дескриптор? Получается когда процессор до него (дескриптора) доходит, он что-то вроде джампа к инструкциям завершению/приостановке процесса делает?
>>1863750 Затем что я наверное способен это понять если буду досканально представлять что где и как происходит. Просто реально, куда именно внутри процесса дискриптор записывается? Как именно он на исполнение/своппинг/завершение повлиять может?
>>1863752 Расскажи нам, что такое файловый дескриптор. Ты же читал какие-то книжки, а в книжках это объясняют. А если не читал или не понял, то почему дегенератские двачи должны тебе объяснить.
>>1863777 "Проще говоря, когда вы открываете файл, операционная система создает запись, представляющую этот файл и хранящую информацию об этом открытом файле. Таким образом, если в вашем OS открыто 100 файлов, то в OS будет 100 записей (где-то в kernel). Эти записи представлены целыми числами, такими как (...100, 101, 102....). Этот номер записи является дескриптором файла. Таким образом, это просто целое число, которое однозначно представляет открытый файл в операционной системе. Если ваш процесс открывает 10 файлов, то в таблице процессов будет 10 записей для файловых дескрипторов."
То что это число выдаваемое процессам я понял, но как именно они на процесс влияют? Каким образом говорят процессу выполнять/невыполнять какие-то вызовы? Хуй мне на ротешник в разъяснений вопроса прилетает везде.
>>1863782 > читает какие-то машпереводы Вот оно че. > Каким образом говорят процессу выполнять/невыполнять какие-то вызовы? Это просто число, данные. Дальше процесс может передавать его как аргумент в другие системные вызовы. Что такое вызов функции, ты представляешь?
>>1863802 >Что такое вызов функции, ты представляешь? Не очень. Знаю что функция main все остальные вызывает, а её в свою очередь ещё какой то процесс (то-ли cli, толи инит). Да и честно сказать про стек подзабыл, помню что туда всё заносится по принципу FIFO до 1-8Мб, по-этому лучше указатели в случае динамических структур/массивов использовать. Всё из-за того что практики по темам нихуя. Даже найти себе задачи проблема. А без этого всего и читать/понимать код/api не выйдет.
>>1863810 В теле функции находятся statemets, один из них - expression statement: [expression] ; Expression составляется из переменных, констант и операторов, которые к ним применяются.
>>1863816 Ебать у тебя каша в голове. crt0 вызывает функцию main. (JFYI)
Короче, у тебя уникальный случай. Вот бывыают пустые головы, которые ничего не знают. Но у тебя в голове куча обрывочных сведений, смешавшихся в кашу. Такого феерического пиздеца надо ещё поискать. Тебе проше забыть всё что знаешь и начать изучать Си с "чистого листа".
Я бы, честно говоря, охуел бы и застрелился в голову, если бы внезапно узнал что ты мой студент.
>>1863991 От себя советую джаваскрипт. Недавно, впервые в жизни, подумал прикоснуться к сетевой параше - написать серверок с передачей данных в удаленный браузер. На чем такое делать - в душе не ебу, но вспомнил, что уже пользуюсь удобным серверком из одного экзешника, в свойствах которого было написано "node.js". Так что решил тоже на ноде писать за неимением других мыслей. Проиграл с этого джаваскрипта. Пишешь хуйню от балды, на чистой интуиции, и оно работает! Просто ор выше гор. Язык почти соответствует парадигме, где беспардонно пишешь "сделай заебись" и норм.
Помогите ньюфагу-хеллоуворлдщику. Кароч хочу я чтобы была возможность в строки писать на любом языке. Однако при компиляции я постоянно ловлю пикрелейтед 1. Но при этом OnlineGDB прекрасно с этим справляется. Почему так, и самое главное, можно ли это пофиксить? Гугл подсказал следующее решение (пик.3), но оно какое-то геморное, не говоря уже о том, что я пока понятия не имею что это вообще такое.
>>1864743 Сменяй кодировку в терминале Гугол говорит просто добавить в settings.json "terminal.integrated.shellArgs.windows": ["-NoExit", "/c", "chcp.com 65001"],
>>1864743 >хочу я чтобы была возможность в строки писать на любом языке Хотеть не вредно. В си строк нет, есть только байты. Так что, если тебе нужны строки, ты сам должен их сделать из байтов. Иными словами, не понимая что такое строки и как работают разные кодировки, ты ничего не напишешь. Можешь разве что высрать говно, которое будет работать только у тебя на компьютере, а у остальных кракозяблы и краши. >оно какое-то геморное, не говоря уже о том, что я пока понятия не имею что это вообще такое Вот съеби и не возвращайся пока не поймешь. Или съеби программировать на питоне. В любом случае - съеби, пока что ты не туда зашел, петушок. Си не тот язык, где можно писать на авось сам не зная что.
Аноны привет. Подскажите, что я жопой прочитал. 1)fork() возвращает родителю PID ребёнка, ребёнку возвращается 0; 2)У ребёнка меняется PPID (Parent Process Id) на PID родителя. Почему меня PPID ребенка не равен пиду родителя ?
>>1865276 pydof systemd = 1490. с помощью pgrep методом тыка нашел что 7373 - pid баша. получается что 7373 пид-баша, когда процесс родитель схлопнулся раньше времени(хер знает почему), как сказал анон >>1865208, потомок вместо того чтобы получить себе в ппид пид-баша-7373, получает в свой ппид пид-системд-1490.
Хай! Начинающий программист, задание вывести строку если в она оканчивается на 3 кириллических символа. Встал вопрос, почему программа не работает. Вообще не понимаю почему, мог бы кто объяснить? #include <stdio.h> #include <string.h> #include <wchar.h> #include <stdlib.h>
wchar_t get_wcs() { wchar_t buf[81] = {0}; wchar_t res = NULL; int len = 0; int n = 0; do { n = wscanf(L"%80[^\n]", buf); if (n < 0) { if (!res) { return NULL; } } else if (n > 0) { int chunk_len = wcslen(buf); int str_len = len + chunk_len; res = realloc(res, sizeof(wchar_t) (str_len + 1)); wmemcpy(res + len, buf, chunk_len); len = str_len; } else { wscanf(L"%c"); } } while (n > 0);
if (len > 0) { res[len] = '\0'; } else { res = calloc(1, sizeof(wchar_t)); } return res; }
int main() { wchar_t s = NULL; s = get_wcs(); int n = wcslen(s); if (/1/(L'А' <= s[n-3]) && (s[n-3] <= L'я') && /2/(L'А' <= s[n-2]) && (s[n-2] <= L'я') && /3*/(L'А' <= s[n-1]) && (s[n-1] <= L'я')) fputws(s, stdout); }
>>1865320 кароче поставил задержку sleep(1) все начало работать корректно.
Если кому интересно. 1) Создается процесс батя ppid=7373, pid=8768, child_pid = 8769 2) Создается процесс ребенок ppid = 8768, pid = 8769, value = 0 3) запускаем наше файло. Мой терминал думает что программа завершена - выводит результат процесса бати, после чего думает что все закончено - уничтожает процесс бати, после чего ребенок получает в свой ppid pid systemd, сверху по иерархии процессов.
Единственное я не понял, почему два a.out? мы же делаем форк от текущего процесса где мы находимся т.е от баша. Должен же быть баш родитель, а a.out чайлд. Я же верно прочитал по схеме, что из баша создается один родитель и один ребенок(красным обвел), т.е за одну функцию fork() мы создаем +2 новых процесса? От родителя создаем еще одного родителя, а от второго ребенка? wtf?)
Подскажите позязя почему условие на '\n" не срабатывает? while (arrayString != '\n'){ scanf("%c", &arrayString); printf("Âû ââåëè ñèìâîë %d: %c\n", i, arrayString); i++;
>>1865511 Макаба съила квадратные скобки ииндексы и кавычки у \n,, но символы считываются потом выводятся но условие в while не срабатывает. Если напрямую присвоить (под комментом) цикл прерывается. С-free win XP.
>>1865829 Незнаю, но у меня жирный проект и специфичный дурной компилятор и я его всю жизнь ИДЕ билдил и там всегда пиздос был в мейкфайле. Но тут чет пришлось подразобрать его и вытащить сборку из IDE.
>>1865824 Есть но я стремался ибо вообще не ебал что они должны делать и как. Конечно буду теперь их изучать. Вообще мейк такой блевотный, что надо что то безмейковое искать.
>>1865829 Ничем, он просто не нужен, как и make. Пользуются этим только шизоидные пердуксоиды, зачем-то пишущие виндовые программы линуксными инструментами. У некоторых голова из жопы выросла, что поделать, бывает.
>>1865833 Мне cmake попроще кажется чем написание скрипта под make. Не агитирую за него, просто стало интересно что аноны думают о нём. >>1865854 А как тогда приделывать CI/CD? Или надо на хосте поднимать IDE для сборки и тестирования проекта? Или обязательно системы сборки должны быть headless-IDE по сути которые должны хавать файлы проектов?
Анон, впервые в жизни начал ковыряться с драйвером устройства на линухе (Xilinx xdma), драйвер представляет до юзерапи символьное устройство (функции read(), write, seek). Мой юзерский код делает что-то типа int rc=read(fd, buf, 32*4096). Буфер выделяю через posix_memalloc. Анон, я вообще не понимаю как это отследить, но когда я делаю прием в отдельном потоке, нон-стоп зацикливая чтение, (даже без синхронизации с основным), программа весело кидает segmentation fault в какие-то произвольные моменты времени. Я вообще не имеею опыта в программировании ядра, как всю эту херь отследить? Есть ли какие-то ограничения на все эти виртуальные памяти ОС и потоки? Что такое AIO, как его можно использовать (драйвер поддерживает)?
>>1866571 >нон-стоп зацикливая чтение, (даже без синхронизации с основным), программа весело кидает segmentation fault в какие-то произвольные моменты времени.
А если буфер уменьшить? А если читать в основном потоке, а писать из другого? А если драйвер кривой и не позволяет одновременные чтение и запись?
>>1867634 Показ десятичного числа. А в памяти числа всё равно в виде нулей и единиц хранятся, Представление отображения имеет смысл как раз при вываоде. Но значительно лучше массив и начальное значение pos сделать размерность хотя бы 16 элементов, а не 10. Иначе там очень хитро стек рушится. Так рушится, что устанешь отлавливать ошибку.
>>1852710 (OP) Не так давно натыкался на новые книги по Си, года 2018-2020-го. Теперь вспомнил, но найти уже не получается. Гуглить книги по Си очень сложно, из за однобуквенного названия. Знает кто какие новые книги есть? Все статье в топку. И книги Праты тоже. У него даже про компилятор ничего не написано. Не было интернета и я толком не мог разобраться как из объектного файла сделать бинарник.
>>1868332 >65,535 Откуда цифры? Я хочу ноду померять. Один чувак на конференции сказал, что она только 2к держит. Не верится. Да и давно это было, в 2015.
>>1868334 >А если тебе нужно узнать сколько будет тачка соединений держать - утилиту пиши или ищи готовую. Так я и спрашиваю как померять, какие утилиты есть и т.п.
>>1868404 Клал я на тебя, идиот блядь. Только если ты думал, что вы тут молокососы можете всех хуесосить, то ты сильно ошибся. Я вас сам так заебу, что в лес убежите.
>>1868003 Бамп. Помогите. У меня самого не получается. Исправление одной ошибки ведёт к несовместимости типов данных в других местах, с невозможностью преобразовать типы.
>>1868539 Этот код мне уже кто-то чуть переделывал без stdafx.h и с добавлением stdio, но я потерял тот код, а сделать сам так же без stdafx.h не могу.
int n; int a[1000]; scanf_s("%d", &n); for (int i = 0; i < n; i++) { scanf_s("%d", &a[i%10]); } for (int i = 0; i < n; i++) { printf("%x : ", (unsigned char)a); printf("%x", (a & bit8) ? 1 : 0); printf("%x", (a & bit7) ? 1 : 0); printf("%x", (a & bit6) ? 1 : 0); printf("%x", (a & bit5) ? 1 : 0); printf("%x", (a & bit4) ? 1 : 0); printf("%x", (a & bit3) ? 1 : 0); printf("%x", (a & bit2) ? 1 : 0); printf("%x |", (a & bit1) ? 1 : 0); } соре за тупые вопросы, но я опять тут. Почему он не выводит больше 2 символов в 16 ричной?
Есть утилита на C под *nix. При сборке разными способами всякий раз ошибка fatal error: sys/sysctl.h: No such file or directory. Файл sys/sysctl.h в системе есть. Возможно не по тому адресу, в котором ищется при сборке. Как фиксить? Ссылки на утилиту ниже
>>1866315 Никто здесь эту задачу сам не решит. Это перечислительная комбинаторика, ее почти никто не изучает даже в вузах, по ней мало книг и вообще инфы на русском.
>>1868335 >Охуенно, писать книгу по Си на 1000 страниц и не написать 10 строк о том как компилировать. Я тебя понимаю, но на самом деле очень-очень зависит от твоей ОС, компилятора, среды разработки и т.п.
Хотя если пишешь книгу для нулевых, было бы полезно небольшой экскурс в этой части дать, на примере пары компиляторов, например.
>>1869310 >раз такой умный, кинь мне книги по которым учился. Буду благодарен. Нам препод нихуя не объясняется. Учимся сами по себе. Вот увидишь он сдуется. Или посоветует дерьмо какое нибудь. Сам небось кроме хеловорлдов ничего не писал.
>>1869329 >И, естественно, ещё сильно зависит от того, как обработчик соединений реализован. Он может тупо много не тянуть. Это самое главное. Для этого и хочу тесты провести. Нашел одну из лучших утилит для тестирования сокетов и вебсокетов. Но блин, не смог собрать на ядре 5.8, ее не обновляли уже 3 года. Вот я писал уже >>1869179
Хз что делать. Сам я пока вряд ли смогу хотя бы приблизиться к пониманию как пофиксить. Автор и другие мейнтейнеры забили на все, почти все живут зарубежом и работают в крутых компаниях, видать им не до этого.
Можешь что то посоветовать, литературу, ссылки, краткий алгоритм как изучать системное программирование на линуксе? Думаю форкнуть проект и ковыряться чтобы понять как устроен. Опыт программирования есть, но на высокоуровневых языках. Трудостей не боюсь, самообучаться умею, но так как область для меня новая и если можно так выразиться олдскульная (средний возраст тех кто пишет на си под линукс думаю больше 40 лет), то пока не понял как составить план обучения.
>>1869186 Ну собственно решить ее можно вообще с 0 знаний, тупо a x 100 + b x 10 + c и гонять цифирки между ними, и считать количество перестановок, только нахуя? Дрочево уровня делить на бумаге в столбик.
>>1869339 На си такие утилиты писать то ещё удовольствие.
Смотря что ты хочешь оттестировать вообще. Я игрался для себя, тестировал, сколько соединений можно держать. Я точные цифры не помню, довольно быстро начинаются проблемы с ограничениями ОС, но они же легко снимаются.
Реально проще тестировать с nodejs или python-asyncio, или go, вместе с докером, чтобы много виртуальных хостов создать с разными адресами.
На Си вообще не стоит в это лезть, если только вот совсем-совсем не нужно именно на Си. Потому что там начинаются нюансы, что либо треды, которые тормозные, либо всякие sselect/kqueue, либо какие-нибудь специфичные внешние либы вроде libevent. Скорее всего будет последнее, иначе ты рухнешь очень рано, но сюрприз, другие платформы тоже построены на этих библиотеках и благодаря этому работают очень быстро.
Поэтому, если ты не пишешь свой nginx, работаешь с сетью, то реально, не лезь в Си, не нужно. Он не для этого. Он для байтоёбства, а не для обслуживания системных вызовов ОС. Посмотри на Go, если хочется низкого уровня, на nodejs/asyncio, если хочется высокого уровня.
>>1869354 Ты наверное не совсем понял. Утилитой tcpkali я хочу протестировать как раз ноду, go, и другие языки. Так как собрать ее не получается, решил углубиться в си. Все равно рано или поздно придется начинать. Более верхнеуровневые языки и платформы я использую, они мне понятны, пришло время опуститься ниже. И как раз появилась интересная задача. Писать свой load tester с нуля я не буду. Да и не за чем. Это будет сложнее чем разобраться с tcpkali. Ее писали опытные телекомщики. Сам я так не напишу. А вот посмотреть их решения могу. Думаю это принесет пользу.
>>1869353 Эталонное решение должно выглядеть как рекурентное соотношение, а реализация соответственно как рекурсивная фукнция. Тупо в лоб можно конечно решить, но это не инженерный подход.
Поясните, пожалуйста, за перспективы С/С++ в научно-технических приложениях. Сам я - НИИшник-металлофизик, на работе пользуюсь Пайтоном, вольфрамовской Математикой и различными МКЭ-системами, но вот решил вкатиться в что-то более низкоуровневое. Больше тяготею к С, так как он проще, а у меня и так есть чем ебать мозги помимо программирования, но не хотелось бы заскочить в поезд, который уже никуда не идет (поэтому Фортран и не рассматриваю). В общем, какие я пока что вижу варианты варианты: 1) С 2) С++ 3) не ебать мозги совсем, ознакомиться с Cython и дальше изучать Матлаб.
>>1869389 Уроки учи школьник. В некоторых языках нет циклов, только рекурсия. Комбинаторные алгоритмы эталонно решаются исключительно рекурсией. Такова их природа. Они рекурсивны. И только если возникает необходимость, рекурсивное решение оптимизуют каким либо образом.
>>1869391 Под эти задачи С просто не подходит В С++ будешь катиться минимум года два, но оно того может стоит. Будучи икспертом в крестах, можно выйти на некст лвл хай лвл программирования даже относительно питона и вмазаться лиспохаскельными биндами. Но ты по-хорошему должен решить, нужно ли оно тебе вообще и достаточно ли ты биг достаточно ли брейн Cython и матлаб вариант, если ты уже присмотрел какие-то вакансии, вник в них и собираешься сесть в офис на следующие N лет
>>1869404 >Под эти задачи С просто не подходит Под какие именно? По численным методам книги есть, на рисерчгейтах мужики пишут, что С/С++/Фортран - стандартная троица более низкоуровневых языков для физики, один написал, что у них в универе твердотельщики переходят с Фортрана на С. >Cython и матлаб вариант, если ты уже присмотрел какие-то вакансии, вник в них и собираешься сесть в офис на следующие N лет Тащемта, я нацеливаюсь на академ-карьеру, даже в случае эмиграции. Просто погромирование мне особо и не интересно, тот же Пайтон я использую в основном для анализа экспериментов и постройки графиков (может еще вкачусь в машинное обучение, тоже сейчас используется в науке и технике).
>>1869418 Дебил, такие задачи решает раздел математики перечислительная комбинаторика. Решений подобных задач существует уже масса. Почти все они сводятся к рекурсии. Хотя, кому я это объясняю...
>>1869381 Эту задачу в принципе можно решить на бумажке, на бумажке подобрать какое-нибудь решение. Скорее всего и предполагалось, что на бумаге решать будут.
А в целом не понятно, что они называют перестановкой мешков.
Всего существует две пары симметричных решений (2, 7, 8, 1, 5, 6, 3, 9, 4) (3, 5, 8, 1, 7, 4, 2, 9, 6) (4, 3, 9, 1, 5, 6, 7, 8, 2) (6, 2, 9, 1, 7, 4, 5, 8, 3) , полный перебор это 362880 вариантов (9!), даже желания в такой ситуации нет заморачиваться на более умные варианты.
>>1869441 "умный" вариант в таких задачках обычно сводиться к тому что можно доказать положение пары чисел, ну например у тебя всегда 1 на одном месте, потому что произведения дают не больше двух сотен, это уже 8! - 40 тысяч вариантов, так что да, умничать вообще не тянет.
Как убрать дублирующиеся опции в приложений с командной строкой? Вот в Линуксе вводишь повторяющийся патерн из опций он выбирает только оригинальный вариант и один. Неужели мне нужно писать сортировочную функцию, искать дубликаты и удалять из строки?
>>1866315 Непонятно как измеряется тяжесть перестановок. Например самый левый мешок тащить на место самого дальнего явно тяжелее, чем поменять любые две соседние пары мешков, однако же по кривому тексту задачи выходит не так.
>>1869447 Ну вот о том и речь, что дольше заморачиваться и уродовать код, чем перебрать.
Вот если на бумажке решать, то очевидно, что 5 не может быть последней цифрой в числе, может быть только второй в двухразрядном или трёхразрядном.
Очевидно, что 1 может быть только старшим или средним разрядом трёхзначного числа.
Очевидно, что трёхразрядное число чётное.
Ну и ещё ряд ограничений можно быстро вывести. Примерно так на бумаге все эти варианты разными переборами и решаются. Помню много подобных развлекательных задачек из детства.
Но на компьютере каждое такое ограничение надо отдельно кодировать, что уже глуповато смотрится.
Рекурсивное решение в принципе может работать быстро, потому что можно автоматом отсекать огромные ненужные ветви, в принципе было бы оправдано, если бы задача была не 9!, а 16! например.
Но морально тяжело придумывать что-то умное, когда в лоб работает за доли секунды. Ну будет работать не 0.1 секунды, а 0.001, какая разница?
>>1869451 Короче в Линуксе когда вводишь прогу ls и кучу опции типа -lslslllslsllaallRSss лишние опции отбрасываются остаются только -lsaRS вот я думаю как мне убрать дублирующиеся опции?
>>1869441 >что они называют перестановкой мешков. Я думаю что одновременно можно только два числа менять местами, тут не нужен полный перебор, от начальной комбинации надо идти, и найти такую к которой ведет меньшее число шагов.
>>1852726 Потому что в си есть хоть какая-то модульность (можно использовать библиотеку скомпилированную другим компилятором) и её можно приклеить к любому другому языку в отличие от C++, для C++ ты все библиотеки должен собирать сам
>>1869713 >>1869686 В С есть стандартизованый ABI, а в С++ нет. Ты не то что в другом языке, ты в самом С++ библиотеку скомпилированную другим компилятором не прилинкуешь.
>>1869721 Я понимаю о чём ты говоришь, но ты несёшь какую-то дичь. Именно что сишный объектный код легко линкуется со всем чем можно. Соответственно, функцию, написанную на Си, легко вызвать отовсюду.
Вызвать С++ функцию из Си ты скорее всего не сможешь. Во всяком случае без правки руками промежуточного asm и ручного name mangling. Еслм очень захотеть, то можно, но дорого и неуниверсально. Я бы смог, но не вижу в этом смысла - гораздо проще объявить функцию как extern "C" и тогда ты без проблем сможешь вызвать её из Си.
>>1869739 >гораздо проще объявить функцию как extern "C" и тогда ты без проблем сможешь вызвать её из Си.
Угу. Но там один такой жЫрный нюанс. Я эксперементировал с линковой С и С++ и обнаружил что если к Си проекту линковать библиотеку, где используются статические классы с конструкторами, то эти конструкторы не вызываются. Если С++ библиотека использует статические объекты с конструкторами, то эти объекты не будут проинициализированы. И с большой вероятностью программа упадёт при вызове функций из этой библиотеки.
>>1869741 Тут ты прав. Но с одним но - этот подводный камень довольно известный. И фиксится тем, что нужно файл где имеется main() функция собрать С++ компилятором.
>>1869441 Естественно на бумаге, это из журнала 1938 года. Прикол в том, что меняя местами первые же два мешка (7 и 2) ты получаешь как бы подсказку к дальнейшим действиям, т.к. произведение - 156 похоже на число в центре.
>>1869186 Это задача на перебор всех вариантов (мутаций), классика программирования. Ну, если решать брутфорсов, а по-другому и не надо, если у тебя есть компьютер. Я решил не сам, к сожалению, спиздив на форуме часть кода для перебора всех вариантов. На моём руйзене за 0.26 секунды перебирает.
Шизик это товарищ из этого поста: >>1869449, которому понадобилось измерять некую "тяжесть перестановок", хотя об этом никто не просил. Сказано просто наименьшее число перестановок, и всё.
Как что то хорошее. Ждать по минуте загрузку страницы, по 5-10 минут 1 трек в мп3 хуевого качества. Месяц качать 1 исоху и то если у какого провайдера халявные тарифы с халявными часами есть.
Спектрумофаги тоже при малейшей возможности допаивали 128к + бетадиск и забывали про мафон как про страшный сон, а то и вовсе выкидывали к хуям свой спек ради самой сраной 286 списанной с пожелтевшим пластиком и в чужих засохших соплях.
>>1870625 >Месяц качать 1 исоху Что еще спизданешь. Я качал за месяц несколько исох для дримкаста. Со скоростью вообще не проблма, проблема была в цене за время соединения.
Но возвращаясь к видео. Что особенного в загрузке через звук? Тогда все компьютеры писали и читали со звуковых носителей, да и интернет тоже через диалап звуком. Восхищаться таким будет только тупорылое зумерье без мозгов. Единственное особенное, что у этого хуя есть доступ к писалке винила. Вот лучше бы покахзал этот станок, чем банальную хуету.
>>1870649 >Тогда все компьютеры писали и читали со звуковых носителей, да и интернет тоже через диалап звуком. Восхищаться таким будет только тупорылое зумерье без мозгов. Я помню по радио передавали звуком игори и программы, я вот этим до сих пор восхищаюсь.
>>1870665 У тебя очень слабы видимо познания в низком уровне. Даже со своими я не вижу ничего охуенного, а только кучу гемороя, наихуевшейшую скорость и ощущение облома, если кто то пернул в эфир во время передачи.
В этой хуйне нет ничего сложного вообще, даже матана никакого ненужно.
>>1870702 >>1870665 >>1870649 А вот чего меня действительно завораживает это представление, как во времена люди пердолились с соснолькой. Как писали утилиты для собственных нужд на ходу и ебали ОС в режиме реального времени.
>>1870710 Что бы что? Передатчик перерисовать с книжки и сделать? Тебе не разработать новый принцип с нуля нужен, а воспроизвести под себя, 99% конструкторских формул в электронике ни содержат ничего за рамками школьной программы.
>>1852710 (OP) Есть у кого опыт самостоятельного написания сетевого стека языка? В языке который я хочу использовать, из сетевого стека только socket api. Хочу навернуть поверх что нибудь чтобы можно было удобно писать для веба. Как пример посмотрел сорцы пакета /net в Golang. Код на Go вроде легко читается и сорцы с комментариями. Литературу бы по реализации сетевых протоколов. Кто нибудь знает такую? Хз как гуглить
>>1871233 Wat? По твоему веб работает не на сетевых протоколах? Сетевые протоколы для веба не на сокетах строятся? Опять кукареки лезут туда в чем ничего не понимают.
>>1871222 >В языке который я хочу использовать, из сетевого стека только socket api. >>1871471 >поверх HTTP >HTTP Какой нахой http, только сокеты есть, пшел вон идиот.
>>1871321 По-моему ты не хочешь что-то писать, а хочешь поговорить о том, чтобы что-то написать. Тонны материалов по этому поводу и реализаций протоколов на разных языках. Бери конкретный протокол и разбирайся с ним.
>>1871480 Хочет писать для WEBа, но не поверх HTTP. Ты даже не понимаешь чего ты хочешь. Тебе наверняка первый ответил дядя, который копался в заголовках IP и TCP. Ты этого не осознал и начал на него наезжать. Ты точно не быдло?
>>1871494 Он хотел ссылок на что-то разжёванное по разным протоколам каким-нибудь. Ну есть там ещё для доменных имён, всякие socks5 и что-нибудь ещё, что с веб связано, но не http при этом.
Но я думаю так, если чел хочет потрепаться, то он пишет на двач или ещё куда. Если хочет именно делать, он пишет на гугл или аналоги. Всё просто.
Когда что-то конкретно не понятно, тогда другая история.
Материалов реально как грязи, там сначала надо понять, как интернет вообще работает, какого рода протоколы для чего используются.
Сап, аноны, вопрос про юникс-программирование. Есть character device устройство в системе (в /dev лежит), устройство представляет собой кусок памяти с информационными полями - статусы, полезная инфа и проч. Анон, как постоянно считывать эти быстро обновляемые данные? Тупо вызывать read() для этого файлового дескриптора? Или есть в ОС какие-то следящие механизмы что-ли kpoll? Что требуется от драйвера? В нем реализованы функции чтения, записи, aio_read/write, seek.
>>1871494 Нахуй мне твой текстовый уебищный http? Только долбоебы поверх http делают протоколы. MQTT, websocket - намного более продвинутые, более легковесные и производительные, и легче в реализации.
>>1871527 Либо делать polling через select/poll/epoll, если в char dev в структуре file_operations имеется обработчик для poll. Либо через сигналы делать и SIGIO, опять же если в char dev в той же структуре есть обработчик для fasync. Но с сигналами заебешься.
>>1871831 В принципе он прав, WebSocket это не http, он мимикрирует под http, принимается вебсервером как http, то потом включается в действие опция upgrade и протокол подменяется.
Классический http работает по схеме запрос-ответ, другого не предусматривает, а вебсокеты двунаправленные, и с дополнительными субпротоколами ещё. При этом какие-то специфичные фишки классического http в вебсокетах не доступны.
Можно это назвать расширением HTTP (по аналогии с HTTP2), можно назвать другим протоколом. Правильнее всё-таки другим протоколом называть.
Есть масса либ, которые реализуют вебсокеты, но не поддерживают ничего другого из http. В nginx приходится немного пританцовывать, чтобы проносить вебсокеты дальше.
>>1871843 Вопрос не в том как называется, а как работает. TCP бинарный протокол, HTTP текстовый. В примерах видно что данные передаются каким то текстом типа base64, то есть +оверхед по размеру +оверхед по упаковке распаковке. Есть ли там чисто бинарная передача?
>>1871847 Хватит хуйню городить. По вебсокетам можно передавать бинарные данные. Нормальные люди так и делают. Вебсокеты не про текст, а про транспорт.
>>1871887 По хттп происходит хендшейк, который включает соответствующую фичу браузера, дальше он не используется. Это как ты ембеддишь swf в хтмл и дальше работает отдельный плагин, другая технология, встроенная в браузер.
>>1872693 Все большую и большую популярность в России и во всем мире завоевывает Linux — UNIX-подобная операционная система для IBM-совместимых персональных компьютеров. Какого года книга?
>>1873047 спасибо, с помощью ерна определил not permitted. Перенес свой файл в другой каталог - все заработало, как оказалось у меня в расшареной папке фифо не создается.